| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- const UglifyJsPlugin = require('uglify-es-webpack-plugin')
- const VueFilenameInjector = require('./tools/vue-filename-injector')
- // 拼接路径
- const resolve = dir => require('path').join(__dirname, dir)
- // 增加环境变量
- process.env.VUE_APP_VERSION = require('./package.json').version
- process.env.VUE_APP_BUILD_TIME = require('dayjs')().format('YYYY-M-D HH:mm:ss')
- // 基础路径 注意发布之前要先修改这里
- let publicPath = '/'
- // 基础路径 打包时使用
- // let publicPath = './'
- module.exports = {
- publicPath, // 根据你的实际情况更改这里
- lintOnSave: true,
- devServer: {
- publicPath // 和 publicPath 保持一致
- },
- css: {
- loaderOptions: {
- // 设置 scss 公用变量文件
- sass: {
- data: `@import '~@/assets/style/public.scss';`
- }
- }
- },
- // 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-service/lib/config/base.js
- chainWebpack: config => {
- /**
- * 删除懒加载模块的 prefetch preload,降低带宽压力
- * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
- * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload
- * 而且预渲染时生成的 prefetch 标签是 modern 版本的,低版本浏览器是不需要的
- */
- config.plugins
- .delete('prefetch')
- .delete('preload')
- // 解决 cli3 热更新失效 https://github.com/vuejs/vue-cli/issues/1559
- config.resolve
- .symlinks(true)
- config
- // 开发环境
- .when(process.env.NODE_ENV === 'development',
- // sourcemap不包含列信息
- config => config.devtool('cheap-source-map')
- )
- // TRAVIS 构建 vue-loader 添加 filename
- .when(
- process.env.VUE_APP_BUILD_MODE === 'TRAVIS' ||
- process.env.NODE_ENV === 'development',
- VueFilenameInjector(config, {
- propName: process.env.VUE_APP_SOURCE_VIEWER_PROP_NAME
- })
- )
- // 非开发环境
- .when(process.env.NODE_ENV === 'development', config => {
- config.optimization
- .minimizer([
- new UglifyJsPlugin({
- uglifyOptions: {
- // 移除 console
- // 其它优化选项 https://segmentfault.com/a/1190000010874406
- compress: {
- drop_console: true,
- drop_debugger: true,
- pure_funcs: ['console.log']
- }
- }
- })
- ])
- })
- // i18n
- config.module
- .rule('i18n')
- .resourceQuery(/blockType=i18n/)
- .use('i18n')
- .loader('@kazupon/vue-i18n-loader')
- .end()
- // svg
- const svgRule = config.module.rule('svg')
- svgRule.uses.clear()
- svgRule
- .include
- .add(resolve('src/assets/svg-icons/icons'))
- .end()
- .use('svg-sprite-loader')
- .loader('svg-sprite-loader')
- .options({
- symbolId: 'd2-[name]'
- })
- .end()
- // image exclude
- const imagesRule = config.module.rule('images')
- imagesRule
- .test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/)
- .exclude
- .add(resolve('src/assets/svg-icons/icons'))
- .end()
- // 重新设置 alias
- config.resolve.alias
- .set('@api', resolve('src/api'))
- // 判断环境加入模拟数据
- // const entry = config.entry('app')
- // if (process.env.VUE_APP_BUILD_MODE !== 'nomock') {
- // entry
- // .add('@/mock')
- // .end()
- // }
- }
- }
|