| 'use strict' |
| const path = require('path') |
| const defaultSettings = require('./src/settings.js') |
| |
| function resolve(dir) { |
| return path.join(__dirname, dir) |
| } |
| |
| const name = defaultSettings.title || 'vue Element Admin' // page title |
| |
| // If your port is set to 80, |
| // use administrator privileges to execute the command line. |
| // For example, Mac: sudo npm run |
| // You can change the port by the following method: |
| // port = 9527 npm run dev OR npm run dev --port = 9527 |
| const port = process.env.port || process.env.npm_config_port || 9527 // dev port |
| |
| // All configuration item explanations can be find in https://cli.vuejs.org/config/ |
| module.exports = { |
| /** |
| * You will need to set publicPath if you plan to deploy your site under a sub path, |
| * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, |
| * then publicPath should be set to "/bar/". |
| * In most cases please use '/' !!! |
| * Detail: https://cli.vuejs.org/config/#publicpath |
| */ |
| publicPath: '/', |
| outputDir: 'dist', |
| assetsDir: 'static', |
| lintOnSave: process.env.NODE_ENV === 'development', |
| productionSourceMap: false, |
| devServer: { |
| port: port, |
| open: true, |
| overlay: { |
| warnings: false, |
| errors: true |
| }, |
| before: require('./mock/mock-server.js') |
| }, |
| configureWebpack: { |
| // provide the app's title in webpack's name field, so that |
| // it can be accessed in index.html to inject the correct title. |
| name: name, |
| resolve: { |
| alias: { |
| '@': resolve('src') |
| } |
| } |
| }, |
| chainWebpack(config) { |
| // it can improve the speed of the first screen, it is recommended to turn on preload |
| // it can improve the speed of the first screen, it is recommended to turn on preload |
| config.plugin('preload').tap(() => [ |
| { |
| rel: 'preload', |
| // to ignore runtime.js |
| // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171 |
| fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], |
| include: 'initial' |
| } |
| ]) |
| |
| // when there are many pages, it will cause too many meaningless requests |
| config.plugins.delete('prefetch') |
| |
| // set svg-sprite-loader |
| config.module |
| .rule('svg') |
| .exclude.add(resolve('src/icons')) |
| .end() |
| config.module |
| .rule('icons') |
| .test(/\.svg$/) |
| .include.add(resolve('src/icons')) |
| .end() |
| .use('svg-sprite-loader') |
| .loader('svg-sprite-loader') |
| .options({ |
| symbolId: 'icon-[name]' |
| }) |
| .end() |
| |
| config |
| .when(process.env.NODE_ENV !== 'development', |
| config => { |
| config |
| .plugin('ScriptExtHtmlWebpackPlugin') |
| .after('html') |
| .use('script-ext-html-webpack-plugin', [{ |
| // `runtime` must same as runtimeChunk name. default is `runtime` |
| inline: /runtime\..*\.js$/ |
| }]) |
| .end() |
| config |
| .optimization.splitChunks({ |
| chunks: 'all', |
| cacheGroups: { |
| libs: { |
| name: 'chunk-libs', |
| test: /[\\/]node_modules[\\/]/, |
| priority: 10, |
| chunks: 'initial' // only package third parties that are initially dependent |
| }, |
| elementUI: { |
| name: 'chunk-elementUI', // split elementUI into a single package |
| priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app |
| test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm |
| }, |
| commons: { |
| name: 'chunk-commons', |
| test: resolve('src/components'), // can customize your rules |
| minChunks: 3, // minimum common number |
| priority: 5, |
| reuseExistingChunk: true |
| } |
| } |
| }) |
| // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk |
| config.optimization.runtimeChunk('single') |
| } |
| ) |
| } |
| } |