博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack自定义编译命令参数
阅读量:5115 次
发布时间:2019-06-13

本文共 1871 字,大约阅读时间需要 6 分钟。

背景

webpack打包配置,根据环境不同判断不同的参数,采用的是项目中建一个.env文件,create-react-app中读取了此文件中的配置并通过DefinePlugin存到了process.env中。

new webpack.DefinePlugin({      ...env.stringified //这里去读取的具体配置    })

上线编译过程中,如果涉及到部署多个不同的环境,需要手动修改.env文件,所以根据npm/yarn自定义参数来解决。

process.argv

nodejs提供了process.argv来获取npm/yarn的命令参数

The process.argv property returns an array containing the command line arguments passed when the Node.js process was launched. The first element will be process.execPath. See process.argv0 if access to the original value of argv[0] is needed. The second element will be the path to the JavaScript file being executed. The remaining elements will be any additional command line arguments.

type: string[]

例如:输入

$ node process-args.js one two=three four

此时,

process.argv = ['/usr/local/bin/node', '
process-args.js', 'one', 'two=three', 'four']

DefinePlugin

DefinePlugin 允许创建一个在编译时可以配置的全局常量。

每个传进 DefinePlugin 的键值都是一个标志符或者多个用 . 连接起来的标志符

注意,因为这个插件直接执行文本替换,给定的值必须包含字符串本身内的实际引号。通常,有两种方式来达到这个效果,使用 '"production"', 或者使用 JSON.stringify('production')。

解决方案

如上,create-react-app中读取了此文件中的配置并通过DefinePlugin存到了process.env中。为了不在使用的时候重复判断当前环境,分别在webpack.config.dev.js 和webpack.config.prod.js配置相同键值的参数

//filterArgs.jsmodule.exports = function(str){  const argv = process.argv  const result = argv.find(item => item.match(str))  if (result) {    return result.split('=')[1]  }  return null}
new webpack.DefinePlugin({      ...env.stringified,      'process.defineEnv': {        REACT_APP_API: JSON.stringify(filterArgs('-api') || process.env.API_DEV)      }    })
new webpack.DefinePlugin({      ...env.stringified,      'process.defineEnv': {        REACT_APP_API: JSON.stringify(filterArgs('-api') || process.env.API_PROD)      }    })

这样就实现了编译时,可以直接输入-api参数定义环境变量

yarn build -api=http:192.168.1.1

使用时,全局process.defineEnv.REACT_APP_API可获取

转载于:https://www.cnblogs.com/object-z/p/10846669.html

你可能感兴趣的文章
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>