// eslint-disable-next-line @typescript-eslint/no-var-requires const merge = require('webpack-merge') // eslint-disable-next-line @typescript-eslint/no-var-requires const tsImportPluginFactory = require('ts-import-plugin') // eslint-disable-next-line @typescript-eslint/no-var-requires const autoprefixer = require('autoprefixer') // eslint-disable-next-line @typescript-eslint/no-var-requires const pxtorem = require('postcss-pxtorem') // eslint-disable-next-line @typescript-eslint/no-var-requires const pxtoviewport = require('postcss-px-to-viewport') const externals = { vue: 'Vue', 'vue-router': 'VueRouter', vuex: 'Vuex', axios: 'axios', 'js-cookie': 'Cookies', vant: 'vant', moment: 'moment' } const cdn = { // 访问https://unpkg.com/element-ui/lib/theme-chalk/index.css获取最新版本 css: [ // '//unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css' ], js: [ '//cdn.bootcss.com/vue/2.6.11/vue.min.js', '//cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js', '//cdn.bootcss.com/vuex/3.1.2/vuex.min.js', '//cdn.bootcss.com/axios/0.19.2/axios.min.js', '//cdn.bootcss.com/js-cookie/2.2.1/js.cookie.min.js', '//cdn.bootcdn.net/ajax/libs/moment.js/2.24.0/moment.min.js', '//cdn.jsdelivr.net/npm/vant@2.5.7/lib/vant.min.js', '//res.wx.qq.com/open/js/jweixin-1.6.0.js' ] } module.exports = { publicPath: process.env.BASE_URL, parallel: false, productionSourceMap: false, devServer: { proxy: { '^/testServer': { target: 'http://192.168.3.207:8181/', changeOrigin: true, logLevel: 'debug', pathRewrite: { '/testServer': '' } } } }, css: { loaderOptions: { sass: { prependData: '@import "@/style/_mixin.scss";@import "@/style/_variables.scss";@import "@/style/base.scss";@import "@/style/common.scss";' // 全局引入 }, postcss: { plugins: [ autoprefixer(), pxtoviewport(({ unitToConvert: 'px', viewportWidth: 375, unitPrecision: 5, propList: [ '*' ], viewportUnit: 'vw', fontViewportUnit: 'vw', selectorBlackList: [], minPixelValue: 1, mediaQuery: false, replace: true, exclude: /(\/|\\)(node_modules)(\/|\\)/ })) // pxtorem({ // rootValue: 37.5, // propList: ['*'] // }) ] } } }, chainWebpack: config => { // 防止多页面打包卡顿 // eslint-disable-next-line no-unused-expressions // config.plugins.delete('named-chunks') if (process.env.NODE_ENV === 'production') { // 打包时需要执行,开发环境运行不需要执行 config.externals(externals) // 如果使用多页面打包,使用vue inspect --plugins查看html是否在结果数组中 config.plugin('html').tap(args => { // html中添加cdn args[0].cdn = cdn // console.log(JSON.stringify(args)) // 修复 Lazy loading routes Error // args[0].chunksSortMode = 'none' return args }) } else { config.plugin('html').tap(args => { // html中添加wxjsssk的cdn args[0].cdn = { js: [ cdn.js[cdn.js.length - 1] ] } return args }) } // 分析静态资源 if (process.env.use_analyzer) { config .plugin('webpack-bundle-analyzer') .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin) } config.module .rule('ts') .use('ts-loader') .tap(options => { options = merge(options, { transpileOnly: true, getCustomTransformers: () => ({ before: [ tsImportPluginFactory({ libraryName: 'vant', libraryDirectory: 'es', style: true }) ] }), compilerOptions: { module: 'es2015' } }) return options }) // return config } }