You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.3 KiB
123 lines
3.3 KiB
const path = require('path')
|
|
const webpack = require('webpack');
|
|
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
|
const CompressionPlugin = require("compression-webpack-plugin");
|
|
const AddAssetHtmlPlugin = require("add-asset-html-webpack-plugin");
|
|
const VueRouterInvokeWebpackPlugin = require('vue-router-invoke-webpack-plugin');
|
|
const $config = require("./build/config")
|
|
const root = path.resolve($config.modules_root, $config.modules_dir);
|
|
const isProd = () => {
|
|
return process.env.NODE_ENV === 'production';
|
|
};
|
|
|
|
let plugins = [];
|
|
plugins.push(
|
|
// 将 dll 注入到 生成的 html 模板中
|
|
new AddAssetHtmlPlugin({
|
|
// dll文件位置
|
|
filepath: path.resolve(root, '*.js'),
|
|
// dll 引用路径
|
|
publicPath: $config.modules_dir,
|
|
// dll最终输出的目录
|
|
outputPath: $config.modules_dir
|
|
})
|
|
)
|
|
plugins.push(
|
|
// 将 dll 注入到 生成的 html 模板中
|
|
new AddAssetHtmlPlugin({
|
|
// dll文件位置
|
|
filepath: path.resolve(root, '*.css'),
|
|
// dll 引用路径
|
|
publicPath: $config.modules_dir,
|
|
// dll最终输出的目录
|
|
typeOfAsset: 'css',
|
|
outputPath: $config.modules_dir
|
|
})
|
|
)
|
|
let modules = Object.keys($config.modules);
|
|
modules.forEach(module => {
|
|
plugins.push(new webpack.DllReferencePlugin({
|
|
context: process.cwd(),
|
|
manifest: require(path.resolve(root, `${module}-manifest.json`))
|
|
}), )
|
|
})
|
|
if (isProd()) {
|
|
plugins.push(new BundleAnalyzerPlugin())
|
|
plugins.push(new CompressionPlugin({
|
|
test: /\.js$|\.html$|\.css/,
|
|
threshold: 10240,
|
|
deleteOriginalAssets: false
|
|
}));
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
publicPath: process.env.NODE_ENV === 'production' ?
|
|
'./' : '/',
|
|
assetsDir: 'static',
|
|
productionSourceMap: false,
|
|
// 以下是必须的,如果你要编译完成之后打印二维码的话
|
|
devServer: {
|
|
open: true,
|
|
host: '0.0.0.0',
|
|
// 要保证不会冲突,否则二维码不对
|
|
port: 3200,
|
|
https: false,
|
|
compress: true,
|
|
hotOnly: false,
|
|
overlay: {
|
|
warnings: false,
|
|
errors: true
|
|
}
|
|
},
|
|
css: {
|
|
// 是否使用css分离插件 ExtractTextPlugin
|
|
extract: isProd() ? true : false,
|
|
// 开启 CSS source maps?
|
|
sourceMap: isProd() ? true : false,
|
|
// css预设器配置项
|
|
loaderOptions: {
|
|
scss: {
|
|
prependData: `
|
|
@import "~@/assets/style/utils.scss";
|
|
`
|
|
},
|
|
},
|
|
// requireModuleExtension: false,
|
|
},
|
|
chainWebpack: config => {},
|
|
configureWebpack: (config) => {
|
|
return {
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve('src')
|
|
}
|
|
},
|
|
plugins: [
|
|
new webpack.ProvidePlugin({
|
|
// _: "lodash",
|
|
// $: "jquery"
|
|
}),
|
|
new webpack.BannerPlugin('文件头声明'),
|
|
// https://github.com/cklwblove/vue-preset/blob/master/generator/index.js
|
|
// https://zhuanlan.zhihu.com/p/63079674
|
|
new VueRouterInvokeWebpackPlugin({
|
|
dir: 'src/views',
|
|
alias: '@/views',
|
|
mode: 'hash',
|
|
base: process.env.BASE_URL,
|
|
ignore: ['images', 'components', 'NotFound.vue', /\.scss$/],
|
|
notFound: '@/views/NotFound.vue',
|
|
|
|
routerDir: 'src/router',
|
|
redirect: [{
|
|
redirect: '/home',
|
|
path: '/'
|
|
}]
|
|
}),
|
|
...plugins
|
|
],
|
|
externals: {}
|
|
}
|
|
}
|
|
}
|