diff --git a/.gitignore b/.gitignore
index cec8de443..770a2b480 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,5 +9,5 @@ lib/*
!lib/style.css
node_modules
example/dist
-dist
+/docs/dist
test/unit/coverage
diff --git a/build/genExamples.js b/build/genExamples.js
index 5db7e8244..d59b81681 100644
--- a/build/genExamples.js
+++ b/build/genExamples.js
@@ -81,6 +81,7 @@ for (var item in Components) {
var exampleVueName = `${docsDir}/examples-dist/${item}.vue`;
+ // 新建一个文件
if (!fs.existsSync(exampleVueName)) {
fs.closeSync(fs.openSync(exampleVueName, 'w'));
}
diff --git a/build/utils/postcss_pipe.js b/build/utils/postcss_pipe.js
index 6c5fafd1b..4c069951c 100644
--- a/build/utils/postcss_pipe.js
+++ b/build/utils/postcss_pipe.js
@@ -1,17 +1,11 @@
-/**
- * Created by tsxuehu on 17/1/4.
- */
var config = {
-
- "bem": {
- "shortcuts": {"component": "b", "modifier": "m", "descendent": "e"},
- "separators": {"descendent": "__", "modifier": "--"}
- }/*,
- "autoprefixer": {"browsers": ["ie > 8", "last 2 versions"]},
- "rem": {"browsers": ["ie > 8", "last 2 versions"]}*/
+ 'bem': {
+ 'shortcuts': {'component': 'b', 'modifier': 'm', 'descendent': 'e'},
+ 'separators': {'descendent': '__', 'modifier': '--'}
+ }
};
// https://github.com/trysound/postcss-easy-import
-var partialImport = require("postcss-easy-import");
+var partialImport = require("postcss-easy-import")();
// 这不是bem,虽然名字叫bem,其实它是suit
// https://github.com/saladcss/saladcss-bem
@@ -20,47 +14,15 @@ var bem = require("saladcss-bem")(config.bem);
// https://github.com/jonathantneal/precss
var precss = require("precss")();
-// https://github.com/adam-h/postcss-sass-color-functions
-var sassColor = require("postcss-sass-color-functions")();
-
-// eleme的组件---
-// https://npmjs.com/package/postcss-css-reset
-// http://elemefe.github.io/postcss-salad/
-var reset = require("postcss-css-reset")();
-
-// eleme的组件---
-// https://npmjs.com/package/postcss-utils
-// http://elemefe.github.io/postcss-salad/
-var utils = require("postcss-utils")();
-
-// https://github.com/postcss/postcss-calc
-var calc = require("postcss-calc")();
-
-// https://github.com/maximkoretskiy/postcss-initial
-var initial = require("postcss-initial")();
-
-// https://github.com/trysound/postcss-inline-svg
-var inlineSvg = require("postcss-inline-svg")();
-
-// https://github.com/jonathantneal/postcss-short
-var short = require("postcss-short")();
-
-// eleme的组件---
-// https://github.com/baiyaaaaa/postcss-shape
-// http://elemefe.github.io/postcss-salad/
-var shape = require("postcss-shape")();
-
-// https://github.com/robwierzbowski/node-pixrem
-var rem = require("pixrem")();
-
// https://github.com/postcss/autoprefixer
var autoprefixer = require("autoprefixer")();
-// https://github.com/jo-asakura/postcss-neat
-var neat = require("postcss-neat")();
-
module.exports = function (webpack) {
// 顺序很重要
- return [partialImport({ addDependencyTo: webpack }), bem, precss, sassColor, reset,
- utils, calc, initial, inlineSvg, short, shape, rem, autoprefixer, neat];
+ return [
+ partialImport,
+ bem,
+ precss,
+ autoprefixer
+ ];
};
diff --git a/build/webpack.build.js b/build/webpack.build.js
index 15644942b..8516e60ee 100644
--- a/build/webpack.build.js
+++ b/build/webpack.build.js
@@ -1,3 +1,5 @@
+var webpack = require('webpack');
+var getPostcssPlugin = require('./utils/postcss_pipe');
var config = require('./webpack.config.js');
config.entry = {
@@ -14,6 +16,28 @@ config.externals = {
vue: 'vue'
};
+config.plugins = [
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': '"production"'
+ }),
+ new webpack.LoaderOptionsPlugin({
+ minimize: true,
+ debug: false,
+ options: {
+ postcss: getPostcssPlugin,
+ babel: {
+ presets: ['es2015'],
+ plugins: ['transform-runtime', 'transform-vue-jsx']
+ },
+ vue: {
+ autoprefixer: false,
+ preserveWhitespace: false,
+ postcss: getPostcssPlugin
+ }
+ }
+ })
+];
+
delete config.devtool;
module.exports = config;
diff --git a/build/webpack.build.min.js b/build/webpack.build.min.js
index be17f3f93..297a3815b 100644
--- a/build/webpack.build.min.js
+++ b/build/webpack.build.min.js
@@ -1,20 +1,19 @@
-var config = require('./webpack.build.js');
var webpack = require('webpack');
+var getPostcssPlugin = require('./utils/postcss_pipe');
+var config = require('./webpack.config.js');
config.output.filename = config.output.filename.replace(/\.js$/, '.min.js');
-config.plugins = [
- new webpack.LoaderOptionsPlugin({
- minimize: true,
- debug: false
- }),
+config.plugins = config.plugins.concat([
new webpack.optimize.UglifyJsPlugin({
- comments: false,
compress: {
- drop_console: true,
warnings: false
- }
+ },
+ output: {
+ comments: false
+ },
+ sourceMap: false
})
-];
+]);
module.exports = config;
diff --git a/build/webpack.components.js b/build/webpack.components.js
index 22ba33d38..3d5d30f5e 100644
--- a/build/webpack.components.js
+++ b/build/webpack.components.js
@@ -1,5 +1,6 @@
+var path = require('path');
var Components = require('../components.json');
-var config = require('./webpack.config.js');
+var config = require('./webpack.build.js');
delete config.devtool;
@@ -10,7 +11,7 @@ config.externals = {
};
config.output = {
- path: './lib',
+ path: path.join(__dirname, '../lib'),
filename: '[name].js',
libraryTarget: 'umd'
};
diff --git a/build/webpack.config.js b/build/webpack.config.js
index 1d311de95..56b140900 100644
--- a/build/webpack.config.js
+++ b/build/webpack.config.js
@@ -6,6 +6,16 @@ var striptags = require('./strip-tags');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var version = require('../package.json').version;
var getPoastcssPlugin = require('./utils/postcss_pipe');
+var ProgressBarPlugin = require('progress-bar-webpack-plugin');
+var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var HtmlWebpackPlugin = require('html-webpack-plugin');
+
+var StyleExtractPlugin;
+if (process.env.NODE_ENV === 'production') {
+ StyleExtractPlugin = new ExtractTextPlugin('[name].[hash:8].css');
+} else {
+ StyleExtractPlugin = new ExtractTextPlugin('[name].css');
+}
function convert(str) {
str = str.replace(/()(\w{4});/gi, function($0) {
@@ -24,12 +34,13 @@ function wrap(render) {
module.exports = {
entry: {
- 'zanui-docs': './docs/index.js',
- 'zanui-examples': './docs/examples.js'
+ 'vendor': ['vue', 'vue-router'],
+ 'docs': './docs/index.js',
+ 'examples': './docs/examples.js'
},
output: {
- path: './docs/build/',
- publicPath: 'docs/build/',
+ path: path.join(__dirname, '../docs/dist'),
+ publicPath: '/',
filename: '[name].js'
},
resolve: {
@@ -51,7 +62,17 @@ module.exports = {
loaders: [
{
test: /\.vue$/,
- loader: 'vue-loader'
+ use: [{
+ loader: 'vue-loader',
+ options: {
+ loaders: {
+ css: ExtractTextPlugin.extract({
+ use: 'css-loader!postcss-loader',
+ fallback: 'vue-style-loader'
+ })
+ }
+ }
+ }]
},
{
test: /\.js$/,
@@ -60,7 +81,9 @@ module.exports = {
},
{
test: /\.css$/,
- loader: 'style-loader!css-loader!postcss-loader'
+ use: ExtractTextPlugin.extract({
+ use: 'css-loader!postcss-loader'
+ })
},
{
test: /\.md/,
@@ -72,12 +95,83 @@ module.exports = {
}
]
},
- devtool: 'source-map'
+ devtool: 'source-map',
+ plugins: [
+ StyleExtractPlugin,
+ new ProgressBarPlugin(),
+ new HtmlWebpackPlugin({
+ chunks: ['vendor', 'docs'],
+ template: 'docs/index.tpl',
+ filename: 'index.html',
+ inject: true
+ }),
+ new HtmlWebpackPlugin({
+ chunks: ['vendor', 'examples'],
+ template: 'docs/index.tpl',
+ filename: 'examples.html',
+ inject: true
+ }),
+ new webpack.LoaderOptionsPlugin({
+ minimize: true,
+ options: {
+ postcss: getPoastcssPlugin,
+ babel: {
+ presets: ['es2015'],
+ plugins: ['transform-runtime', 'transform-vue-jsx']
+ },
+ vue: {
+ autoprefixer: false,
+ postcss: getPoastcssPlugin
+ },
+ vueMarkdown: {
+ use: [
+ [require('markdown-it-anchor'), {
+ level: 2,
+ slugify: slugify,
+ permalink: true,
+ permalinkBefore: true
+ }],
+ [require('markdown-it-container'), 'demo', {
+ validate: function(params) {
+ return params.trim().match(/^demo\s*(.*)$/);
+ },
+
+ render: function(tokens, idx) {
+ var m = tokens[idx].info.trim().match(/^demo\s*(.*)$/);
+ if (tokens[idx].nesting === 1) {
+ var description = (m && m.length > 1) ? m[1] : '';
+ var content = tokens[idx + 1].content;
+ var html = convert(striptags.strip(content, ['script', 'style']));
+
+ return `