mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
156 lines
4.4 KiB
JavaScript
156 lines
4.4 KiB
JavaScript
const webpack = require('webpack');
|
|
const path = require('path');
|
|
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
|
const ProgressBarPlugin = require('progress-bar-webpack-plugin');
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
|
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');
|
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
const docConfig = require('../docs/src/doc.config');
|
|
const { extractExample } = require('zan-doc/src/helper');
|
|
const styleLoaders = [
|
|
{ loader: 'css-loader' },
|
|
{ loader: 'postcss-loader', options: { sourceMap: true } }
|
|
];
|
|
|
|
// extract [components].vue from [components].md
|
|
extractExample({
|
|
src: path.resolve(__dirname, '../docs/examples-docs'),
|
|
dist: path.resolve(__dirname, '../docs/examples-dist'),
|
|
nav: docConfig['zh-CN'].nav,
|
|
watch: !isProduction
|
|
});
|
|
|
|
module.exports = {
|
|
entry: {
|
|
'vant-docs': './docs/src/index.js',
|
|
'vant-examples': './docs/src/examples.js'
|
|
},
|
|
output: {
|
|
path: path.join(__dirname, '../docs/dist'),
|
|
publicPath: '/',
|
|
filename: '[name].js',
|
|
umdNamedDefine: true,
|
|
chunkFilename: 'async.[name].js'
|
|
},
|
|
devServer: {
|
|
historyApiFallback: {
|
|
rewrites: [
|
|
{ from: /^\/zanui\/vue\/examples/, to: '/examples.html' },
|
|
{ from: /^\/zanui\/vue/, to: '/index.html' }
|
|
]
|
|
},
|
|
stats: 'errors-only'
|
|
},
|
|
resolve: {
|
|
modules: [path.join(__dirname, '../node_modules'), 'node_modules'],
|
|
extensions: ['.js', '.vue', '.css'],
|
|
alias: {
|
|
vue: 'vue/dist/vue.runtime.esm.js',
|
|
packages: path.join(__dirname, '../packages'),
|
|
lib: path.join(__dirname, '../lib'),
|
|
components: path.join(__dirname, '../docs/src/components')
|
|
}
|
|
},
|
|
module: {
|
|
loaders: [
|
|
{
|
|
test: /\.vue$/,
|
|
use: [
|
|
{
|
|
loader: 'vue-loader',
|
|
options: {
|
|
preserveWhitespace: false,
|
|
loaders: {
|
|
postcss: ExtractTextPlugin.extract({
|
|
use: styleLoaders,
|
|
fallback: 'vue-style-loader'
|
|
}),
|
|
css: ExtractTextPlugin.extract({
|
|
use: styleLoaders,
|
|
fallback: 'vue-style-loader'
|
|
})
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
test: /\.js$/,
|
|
exclude: /node_modules|vue-router\/|vue-loader\//,
|
|
loader: 'babel-loader'
|
|
},
|
|
{
|
|
test: /\.css$/,
|
|
use: ExtractTextPlugin.extract({ use: styleLoaders })
|
|
},
|
|
{
|
|
test: /\.md/,
|
|
loader: 'vue-markdown-loader'
|
|
},
|
|
{
|
|
test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/,
|
|
loader: 'url-loader'
|
|
}
|
|
]
|
|
},
|
|
devtool: 'source-map',
|
|
plugins: [
|
|
new ProgressBarPlugin(),
|
|
new webpack.LoaderOptionsPlugin({
|
|
minimize: true,
|
|
options: {
|
|
vue: {
|
|
autoprefixer: false
|
|
},
|
|
vueMarkdown: {
|
|
use: [
|
|
[
|
|
require('markdown-it-container'),
|
|
'demo',
|
|
{
|
|
validate: function(params) {
|
|
return params.trim().match(/^demo\s*(.*)$/);
|
|
},
|
|
|
|
render: function(tokens, idx) {
|
|
return tokens[idx].nesting === 1
|
|
? `<demo-block class="demo-box"><div class="highlight" slot="highlight"å>`
|
|
:`</div></demo-block>\n`;
|
|
}
|
|
}
|
|
]
|
|
],
|
|
preprocess: function(MarkdownIt, source) {
|
|
MarkdownIt.renderer.rules.table_open = () => '<table class="zan-doc-table">';
|
|
return source;
|
|
}
|
|
}
|
|
}
|
|
}),
|
|
new HtmlWebpackPlugin({
|
|
chunks: ['vendor', 'vant-docs'],
|
|
template: 'docs/src/index.tpl',
|
|
filename: 'index.html',
|
|
inject: true
|
|
}),
|
|
new HtmlWebpackPlugin({
|
|
chunks: ['vendor', 'vant-examples'],
|
|
template: 'docs/src/index.tpl',
|
|
filename: 'examples.html',
|
|
inject: true
|
|
}),
|
|
new webpack.optimize.CommonsChunkPlugin({
|
|
name: 'vendor',
|
|
minChunks: 2
|
|
}),
|
|
new webpack.HotModuleReplacementPlugin(),
|
|
new OptimizeCssAssetsPlugin(),
|
|
new ExtractTextPlugin({
|
|
filename: isProduction ? '[name].[hash:8].css' : '[name].css',
|
|
allChunks: true
|
|
}),
|
|
new FriendlyErrorsPlugin()
|
|
]
|
|
};
|