看前面vue-cli讲解的文章,对process.env.NODE_ENV,一直不理解是怎么设置的,怎么就变成production或者development

  1. // webpack.base.config.js
  2. output: {
  3. path: config.build.assetsRoot,
  4. filename: '[name].js',
  5. publicPath: process.env.NODE_ENV === 'production'
  6. ? config.build.assetsPublicPath
  7. : config.dev.assetsPublicPath
  8. },

通过看了不同的文章,大概有所了解.
请参考process.env
改变运行脚本的环境变量
业务代码如何判断生产/开发环境
DefinePlugin中的淫技巧

process.env

process对象用于处理与当前进程相关的事情,它是一个全局对象,可以在任何地方直接访问到它而无需引入额外模块。 它是 EventEmitter 的一个实例。
process.env 获取当前系统环境信息的对象,常规可以用来进一步获取环境变量、用户名等系统信息:

  1. console.log(process.env);
  2. console.log('username: ' + process.env.USERNAME);
  3. console.log('PATH: ' + process.env.PATH);

webpack 开发和生产的区别

开发环境(development)和生产环境(production)的构建目标差异很大。
在开发环境中,我们需要具有强大的、具有实时重新加载(live reloading)或热模块替换(hot module replacement)能力的 source map 和 localhost server。
而在生产环境中,我们的目标则转向于关注更小的 bundle,更轻量的 source map,以及更优化的资源,以改善加载时间。
由于要遵循逻辑分离,我们通常建议为每个环境编写彼此独立的 webpack 配置。
分别为
webpack.config.js
webpack.dev.js
webpack.production.js

如何区分生产环境还是开发环境

引入process.env,这样就可以在业务代码中靠process.env.NODE_ENV来判断.
在webpack.base.config.js区分process.env.NODE_ENV来决定设置webpack配置为开发还是生产.

  1. // webpack.base.config.js
  2. output: {
  3. path: config.build.assetsRoot,
  4. filename: '[name].js',
  5. publicPath: process.env.NODE_ENV === 'production'
  6. ? config.build.assetsPublicPath
  7. : config.dev.assetsPublicPath
  8. },

process.env.NODE_ENV如何设置

  1. 因为process是nodejs全局变量,可以通过命令行设置

    1. export NODE_ENV = production && webpack
    2. export NODE_ENV = dev && webpack
  2. 也可以通过package.json设置

    1. {
    2. "scripts": {
    3. "dev": "export NODE_ENV=dev&&webpack --progress --colors",
    4. "production": "export NODE_ENV=production&&webpack --progress --colors",
    5. },
  3. 也可以借助webpack.DefinePlugin插件,在代码里面设置,如

    1. //webpack.dev.js
    2. plugins: [
    3. new webpack.DefinePlugin({
    4. 'process.env': config.dev.env
    5. }),
    6. //config/index.js
    7. dev: {
    8. env: require('./dev.env'),
    9. port: 8080,
    10. //config/dev.env.js
    11. var merge = require('webpack-merge')
    12. var prodEnv = require('./prod.env')
    13. module.exports = merge(prodEnv, {
    14. NODE_ENV: '"development"'
    15. })

    但是在build.js中 process.env.NODE_ENV = ‘production’ ,不知道这个和webpack.prod.js里面的有什么区别.