package.js
"scripts": {
"serve": "vue-cli-service serve",
"build:pc": "vue-cli-service build pc",
"build:m": "vue-cli-service build m",
"lint": "eslint --fix --ext .js,.vue src"
},
vue.config.js
// 代碼壓縮
const TerserPlugin = require('terser-webpack-plugin')
// gzip壓縮
const CompressionPlugin = require('compression-webpack-plugin')
const webpack = require('webpack')
const path = require('path')
// var proEnv = require('./config/pro.env') // 生產(chǎn)環(huán)境
// var devEnv = require('./config/dev.env') // 本地環(huán)境
// 默認(rèn)是本地環(huán)境
const env = process.env.NODE_ENV
let writeEnv = ''
if (env === 'production') { // 生產(chǎn)環(huán)境
writeEnv = require('./config/pro.env') // 生產(chǎn)環(huán)境
} else { // 本地環(huán)境
// 測試
writeEnv = require('./config/dev.env') // 本地環(huán)境
}
function resolve(dir) {
return path.join(__dirname, dir)
}
const HOST = '0.0.0.0'
const PORT = '8045'
// const DEV_URL = 'http://teamworkapi.mokingsoft.com';
// const DEV_URL = 'https://pmp.yangguangqicai.com/api'
// const pages = {
// m: {
// entry: 'src/pages/m/main.js',
// template: 'public/m.html',
// filename: 'index.html',
// chunks: ['chunk-vendors', 'chunk-common', 'm']
// },
// pc: {
// entry: 'src/pages/pc/main.js',
// template: 'public/pc.html',
// filename: 'index.html',
// chunks: ['chunk-vendors', 'chunk-common', 'pc']
// }
// }
const projectname = process.argv[3] // 獲取build后面的參數(shù)確定執(zhí)行哪個文件
function getEntry() {
let entries = {}
if (process.env.NODE_ENV == 'production') {
entries = {
index: {
// page的入口
entry: 'src/pages/'+projectname+'/main.js',
// 模板來源
template: `public/index.html`,
// 在 dist/index.html 的輸出
// title: 'CIMS--'+projectName,
filename: 'index.html',
chunks: ['chunk-vendors', 'chunk-common', 'index']
}
}
} else {
let items = ['pc','m']
for (let i in items) {
const fileName=items[i];
entries[fileName] = {
entry: `src/pages/${fileName}/main.js`,
// 模板來源
template: `public/index.html`,
// 在 dist/index.html 的輸出
filename: `${fileName}.html`,
// title: 'CIMS--'+fileName,
// 提取出來的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', fileName]
}
}
}
return entries
}
// let usedPage = {}
// const projectname = process.argv[3] // 獲取build后面的參數(shù)確定執(zhí)行哪個文件
// if (env == 'production') {
// usedPage[projectname] = pages[projectname]
// } else {
// usedPage = pages
// }
const usedPage=getEntry();
console.log(process);
module.exports = {
// 測試 h5: newcrm_page_h5test newcrm_page_test
publicPath: process.env.NODE_ENV === 'production' ? '/newcrm_page_h5/' : '/',
// 正式 newcrm_page_h5 newcrm_page
// publicPath: process.env.NODE_ENV === 'production' ? '/crm_page/' : '/',
productionSourceMap: process.env.NODE_ENV !== 'production',
pages: usedPage,
outputDir: 'dist/' + projectname,
// indexPath: 'index.html', // 指定生成的index.html輸出路徑
css: {
loaderOptions: {
less: {
modifyVars: {
blue: '#3a82f8',
'text-color': '#333'
},
javascriptEnabled: true
}
}
},
devServer: {
host: HOST,
port: PORT,
proxy: {
// 配置跨域
'/api': {
// 要訪問的跨域的api的域名
target: `${writeEnv.hosturl}/`,
ws: true,
changOrigin: true,
pathRewrite: {
'^/api': ''
}
},
}
},
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
// 為生產(chǎn)環(huán)境修改配置
config.plugins.push(
new TerserPlugin({
// parallel:true,// 使用多進(jìn)程并行運(yùn)行來提高構(gòu)建速度。默認(rèn)并發(fā)運(yùn)行數(shù):os.cpus().length - 1扫尖。
terserOptions: {
ie8: true,
compress: {
drop_debugger: true,
drop_console: true // 生產(chǎn)環(huán)境自動刪除console
},
warnings: false
}
}),
new CompressionPlugin({
// gzip壓縮配置
test: /\.js$|\.html$|\.css/, // 匹配文件名
threshold: 10240, // 對超過10kb的數(shù)據(jù)進(jìn)行壓縮
deleteOriginalAssets: false, // 是否刪除原文件
algorithm: 'gzip',
minRatio: 0.8
}),
// 可能中英文翻譯有問題關(guān)注這個設(shè)置
// 提取 monent 有效部分嘹悼,減小體積哨啃。壓縮前 611k->163k
// en-gb 英國 en-us 美國(默認(rèn)值) vi 越南 zh-cn 中國
new webpack.ContextReplacementPlugin(
/moment[\/\\]locale$/,
/^\.\/(zh-cn|en-us|vi)$/i
) // 在vue工程中割粮,在引入moment時争便,發(fā)現(xiàn)build之后的包比不引入moment的包文件大了整整兩百多kb浮毯,后來發(fā)現(xiàn)webpack會把moment的語言包也一起打包
)
} else {
// config.devtool = 'source-map';
// config.devtool = false;
}
config.resolve = {
extensions: ['.js', '.vue', '.json', '.css'],
alias: {
vue$: 'vue/dist/vue.esm.js',
'@': resolve('src'),
assets: resolve('src/assets'),
components: resolve('src/components')
}
}
},
lintOnSave: false,
chainWebpack: config => {
// config.module.rules.delete('svg')
config.module
.rule('iview')
.test(/\.js$/)
.use('babel')
.loader('babel-loader')
.end() // 此處是添加內(nèi)容重點(diǎn)
config.resolve.alias.set('@', resolve('src'))
}
}