美文网首页
# webpack学习笔记之十三 - cross-env 使用

# webpack学习笔记之十三 - cross-env 使用

作者: 人话博客 | 来源:发表于2022-02-27 11:49 被阅读0次
  • webpack 的执行环境是 node.js
  • node.js 执行环境中,在所有模块里都可以访问到一个全局进程变量 process
  • process 全局变量身上都一个对象叫 env ==> process.env
  • 由于 JavaScript 是非常动态的语言,我们可以随意在任意对象上任意的添加属性. 所以,很多前端脚手架配置文件里的 process.env.NODE_ENV 就是在 node.js 执行环境下的全局对象 process.env 上添加了一个很简单的字符串(development production).
  • cross-env 是一个第三方库,可以不在 .js 文件中,以命令的方式给process.env(特定对象上&配置文件之外),动态的添加各种属性.在 package.json中的 scripts 脚本配置
  • cress-env 是跨平台的.
// 在 package.json 中
{
    "scripts:" : {
        "setFccc": "cross-env fccc=123"
        "setHaha" : "cross-env haha=zhnas"
    }
}
// 上述两句配置等价于在 js 模块中
    
process.env.fccc = '123'
process.env.haha = 'zhnas'

很多前端打包工具的的条件编译都是利用 process.env.xxxx 来进行的.


  • 知道了 process.env 是全局的,可以在任意的打包的配置 js 文件中访问.
  • 也知道了可以利用 cross-env 在 配置 js 文件以外修改 process.env.xx 的值.
  • 那我们只需要在配置的 js 文件中,在配置 js 文件中通过判断 process.env.xxx 的值,来进行指定的条件编译即可.
cress-env.png

一个简单的 DEMO.

通过 process.env.locale 的值,来动态的指定 index.htmltitle 属性值

// package.json 安装依赖
"devDependencies": {
    "clean-webpack-plugin": "^4.0.0",
    "cross-env": "^7.0.3",
    "html-webpack-plugin": "^3.2.0",
    "webpack": "^4.46.0",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.10.3"
  }
// package.json scripts 脚本配置
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.config.js",
    "en":"cross-env locale=en webpack --config webpack.config.js",
    "zh":"cross-env locale=zh webpack --config webpack.config.js"
  },
// webpack.config.js 配置代码
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')


// 根据指定的 process.env.locale 来动态的设定 index.html 的 title 模板值.
const getIndexTitleWithLocale = () => {

  switch (process.env.locale) {
    case "en":
      return "this is english site!"
    case "zh":
      return "这是中文网站!"
    default:
      return "你并未设置 process.env.locale 属性"
  }
}

module.exports = {
  entry: path.resolve(__dirname, './src/index.js'),
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, './dist')
  },
  plugins: [
    new HtmlWebpackPlugin({
      // 动态指定模板 title,不能使用 template 属性
      // template: path.resolve(__dirname),
      title: getIndexTitleWithLocale()
    }),
    new CleanWebpackPlugin()
  ]
}

效果:

cross-env-demo.gif

码云地址

相关文章

网友评论

      本文标题:# webpack学习笔记之十三 - cross-env 使用

      本文链接:https://www.haomeiwen.com/subject/bulhrrtx.html