我在scr同级目录下创建了config文件夹,里边包含三个文件
它们3个有引用关系
dev引用prod
prod.env.js文件
/*
* process.argv.splice(2)[0]返回的是node.js的绝对路径
* '/usr/local/bin/node'
*/
let HOST = process.argv.splice(2)[0] || 'prod'
module.exports = {
NODE_ENV: '"production"', // 导出了一个环境
HOST: HOST
}
dev.env.js文件
/*
* webpack-merge插件:
* 该插件用来合并对象,配置文件需要,
* 相同的选项会被替换掉
* 插件需要安装
*/
const merge = require('webpack-merge')
const prodEnv = require ('./prod.env')
module.exports = merge(prodEnv,{
NODE_ENV: 'development', // 将两个配置合并,生成了development环境
HOST: 'dev'
})
index.js文件
const path = require('path');
let host = '127.0.0.1' // 项目运行成功后本地服务地址,localhost
let backend = 'http://127.0.0.1:9999' // 后端地址
module.exports = {
dev: { // 开发环境
host: host, // 可以被process.env.HOST覆盖
port: 8080, // 端口号
assetsSubDirectory: 'static', // 静态资源存放目录
assetsPublicPath: '/', // 引用资源的相对路径,地址为http://...就是访问网络资源
proxyTable: { // 跨域,在开发环境下才有跨域,所以这个属性在dev下
"/start": {
target: backend, // 目标接口域名,http://locahost:8080/start == http://backend/start
timeout: 2000000, // 设置超时
changeOrigin: true // 是否跨域
}
},
autoOpenBrowser: false, // 运行成功后自动启动浏览器
errOverlay: true, // 在浏览器展示错误蒙层
notifyOnErrors: true, // 错误事件监听器,是否展示错误的通知
poll: false, // 指定webpack检查文件的方式,使用poll选项,以轮询的方式去检查文件是否改变
cacheBusting: true, // 指定是否通过在文件名称后面添加一个查询字符串来创建source mao的缓存
cssSourceMap: true,
devtool: 'cheap-module-eval-source-map' // source maps的格式
},
build: { // 生产环境
index: path.resolve(__dirname,'../dist/index.html'), // html文件的生成的地方,是绝对路径
assetsRoot: path.resolve(__dirname,'../dist'), // 编译生成的文件目录
assetsSubDirectory: 'static',
assetsPublicPath: '/',
productionSourceMap: true, // 是否生产环境的sourcmap,sourcmap是用来debug编译后文件的,通过映射到编译前文件来实现
productionGzip: false, // 是否开启生产环境的gzip压缩 (如果要压缩必须安装compression-webpack-plugin)
devtool: '#source-map',
productionGzipExtensions: ['js','css'], // 是否开启生产环境的gzip压缩 (如果要压缩必须安装compression-webpack-plugin)
bundleAnalyzerReport: process.env.npm_config_report // 是否开启编译完成后的报告(如果这个选项是true的话,那么则会在build后,会在浏览器中生成一份bundler报告)
}
}