mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
136 lines
3.9 KiB
JavaScript
136 lines
3.9 KiB
JavaScript
const webpack = require('webpack');
|
|
const path = require('path');
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
|
const ProgressBarPlugin = require('progress-bar-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: {
|
|
vendor: ['packages'],
|
|
'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: {
|
|
host: '0.0.0.0',
|
|
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',
|
|
options: {
|
|
preventExtract: true,
|
|
use: [[require('markdown-it-container'), 'demo']],
|
|
preprocess(MarkdownIt, source) {
|
|
const styleRegexp = /<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/i;
|
|
const scriptRegexp = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/i;
|
|
MarkdownIt.renderer.rules.table_open = () =>
|
|
'<table class="zan-doc-table">';
|
|
return source.replace(styleRegexp, '').replace(scriptRegexp, '');
|
|
}
|
|
}
|
|
},
|
|
{
|
|
test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/,
|
|
loader: 'url-loader'
|
|
}
|
|
]
|
|
},
|
|
devtool: 'source-map',
|
|
plugins: [
|
|
new ProgressBarPlugin(),
|
|
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,
|
|
filename: isProduction ? 'vendor.[hash:8].js' : 'vendor.js'
|
|
}),
|
|
new ExtractTextPlugin({
|
|
filename: isProduction ? '[name].[hash:8].css' : '[name].css',
|
|
allChunks: true
|
|
}),
|
|
new FriendlyErrorsPlugin()
|
|
]
|
|
};
|