可视化平台
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

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: {}
}
}
}