Commit 27067a70d3df3508796b64b2c387dbed7684f3b4

Authored by 吉鹏
1 parent fedf6da380
Exists in master

外网开放

Showing 1 changed file with 2 additions and 0 deletions   Show diff stats
1 'use strict' 1 'use strict'
2 const path = require('path') 2 const path = require('path')
3 const defaultSettings = require('./src/settings.js') 3 const defaultSettings = require('./src/settings.js')
4 4
5 function resolve(dir) { 5 function resolve(dir) {
6 return path.join(__dirname, dir) 6 return path.join(__dirname, dir)
7 } 7 }
8 8
9 const name = defaultSettings.title || 'vue Element Admin' // page title 9 const name = defaultSettings.title || 'vue Element Admin' // page title
10 10
11 // If your port is set to 80, 11 // If your port is set to 80,
12 // use administrator privileges to execute the command line. 12 // use administrator privileges to execute the command line.
13 // For example, Mac: sudo npm run 13 // For example, Mac: sudo npm run
14 // You can change the port by the following method: 14 // You can change the port by the following method:
15 // port = 9527 npm run dev OR npm run dev --port = 9527 15 // port = 9527 npm run dev OR npm run dev --port = 9527
16 const port = process.env.port || process.env.npm_config_port || 9527 // dev port 16 const port = process.env.port || process.env.npm_config_port || 9527 // dev port
17 17
18 // All configuration item explanations can be find in https://cli.vuejs.org/config/ 18 // All configuration item explanations can be find in https://cli.vuejs.org/config/
19 module.exports = { 19 module.exports = {
20 /** 20 /**
21 * You will need to set publicPath if you plan to deploy your site under a sub path, 21 * You will need to set publicPath if you plan to deploy your site under a sub path,
22 * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, 22 * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
23 * then publicPath should be set to "/bar/". 23 * then publicPath should be set to "/bar/".
24 * In most cases please use '/' !!! 24 * In most cases please use '/' !!!
25 * Detail: https://cli.vuejs.org/config/#publicpath 25 * Detail: https://cli.vuejs.org/config/#publicpath
26 */ 26 */
27 publicPath: '/', 27 publicPath: '/',
28 outputDir: 'dist', 28 outputDir: 'dist',
29 assetsDir: 'static', 29 assetsDir: 'static',
30 lintOnSave: process.env.NODE_ENV === 'development', 30 lintOnSave: process.env.NODE_ENV === 'development',
31 productionSourceMap: false, 31 productionSourceMap: false,
32 devServer: { 32 devServer: {
33 port: port, 33 port: port,
34 open: true, 34 open: true,
35 public: require('os').networkInterfaces()[Object.keys(require('os').networkInterfaces())[0]][1].address + ':8080',
36 disableHostCheck: true,
35 overlay: { 37 overlay: {
36 warnings: false, 38 warnings: false,
37 errors: true 39 errors: true
38 }, 40 },
39 before: require('./mock/mock-server.js') 41 before: require('./mock/mock-server.js')
40 }, 42 },
41 configureWebpack: { 43 configureWebpack: {
42 // provide the app's title in webpack's name field, so that 44 // provide the app's title in webpack's name field, so that
43 // it can be accessed in index.html to inject the correct title. 45 // it can be accessed in index.html to inject the correct title.
44 name: name, 46 name: name,
45 resolve: { 47 resolve: {
46 alias: { 48 alias: {
47 '@': resolve('src') 49 '@': resolve('src')
48 } 50 }
49 } 51 }
50 }, 52 },
51 chainWebpack(config) {//链式打包 53 chainWebpack(config) {//链式打包
52 config.plugins.delete('preload') // TODO: need test 54 config.plugins.delete('preload') // TODO: need test
53 config.plugins.delete('prefetch') // TODO: need test 55 config.plugins.delete('prefetch') // TODO: need test
54 56
55 // set svg-sprite-loader 57 // set svg-sprite-loader
56 config.module 58 config.module
57 .rule('svg') 59 .rule('svg')
58 .exclude.add(resolve('src/icons')) 60 .exclude.add(resolve('src/icons'))
59 .end() 61 .end()
60 config.module 62 config.module
61 .rule('icons') 63 .rule('icons')
62 .test(/\.svg$/) 64 .test(/\.svg$/)
63 .include.add(resolve('src/icons')) 65 .include.add(resolve('src/icons'))
64 .end() 66 .end()
65 .use('svg-sprite-loader') 67 .use('svg-sprite-loader')
66 .loader('svg-sprite-loader') 68 .loader('svg-sprite-loader')
67 .options({ 69 .options({
68 symbolId: 'icon-[name]' 70 symbolId: 'icon-[name]'
69 }) 71 })
70 .end() 72 .end()
71 73
72 // set preserveWhitespace 74 // set preserveWhitespace
73 config.module 75 config.module
74 .rule('vue') 76 .rule('vue')
75 .use('vue-loader') 77 .use('vue-loader')
76 .loader('vue-loader') 78 .loader('vue-loader')
77 .tap(options => { 79 .tap(options => {
78 options.compilerOptions.preserveWhitespace = true 80 options.compilerOptions.preserveWhitespace = true
79 return options 81 return options
80 }) 82 })
81 .end() 83 .end()
82 84
83 config 85 config
84 // https://webpack.js.org/configuration/devtool/#development 86 // https://webpack.js.org/configuration/devtool/#development
85 .when(process.env.NODE_ENV === 'development', 87 .when(process.env.NODE_ENV === 'development',
86 config => config.devtool('cheap-source-map') 88 config => config.devtool('cheap-source-map')
87 ) 89 )
88 90
89 config 91 config
90 .when(process.env.NODE_ENV !== 'development', 92 .when(process.env.NODE_ENV !== 'development',
91 config => { 93 config => {
92 config 94 config
93 .plugin('ScriptExtHtmlWebpackPlugin') 95 .plugin('ScriptExtHtmlWebpackPlugin')
94 .after('html') 96 .after('html')
95 .use('script-ext-html-webpack-plugin', [{ 97 .use('script-ext-html-webpack-plugin', [{
96 // `runtime` must same as runtimeChunk name. default is `runtime` 98 // `runtime` must same as runtimeChunk name. default is `runtime`
97 inline: /runtime\..*\.js$/ 99 inline: /runtime\..*\.js$/
98 }]) 100 }])
99 .end() 101 .end()
100 config 102 config
101 .optimization.splitChunks({ 103 .optimization.splitChunks({
102 chunks: 'all', 104 chunks: 'all',
103 cacheGroups: { 105 cacheGroups: {
104 libs: { 106 libs: {
105 name: 'chunk-libs', 107 name: 'chunk-libs',
106 test: /[\\/]node_modules[\\/]/, 108 test: /[\\/]node_modules[\\/]/,
107 priority: 10, 109 priority: 10,
108 chunks: 'initial' // only package third parties that are initially dependent 110 chunks: 'initial' // only package third parties that are initially dependent
109 }, 111 },
110 elementUI: { 112 elementUI: {
111 name: 'chunk-elementUI', // split elementUI into a single package 113 name: 'chunk-elementUI', // split elementUI into a single package
112 priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app 114 priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
113 test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm 115 test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
114 }, 116 },
115 commons: { 117 commons: {
116 name: 'chunk-commons', 118 name: 'chunk-commons',
117 test: resolve('src/components'), // can customize your rules 119 test: resolve('src/components'), // can customize your rules
118 minChunks: 3, // minimum common number 120 minChunks: 3, // minimum common number
119 priority: 5, 121 priority: 5,
120 reuseExistingChunk: true 122 reuseExistingChunk: true
121 } 123 }
122 } 124 }
123 }) 125 })
124 config.optimization.runtimeChunk('single') 126 config.optimization.runtimeChunk('single')
125 } 127 }
126 ) 128 )
127 } 129 }
128 } 130 }
129 131