process.env
process.env是运行node脚本时的环境对象,此环境中的变量可以在process.env中取到,但只能在node脚本中取。
对于被webpack打包的项目js文件,必须在webpack.config中通过definePlugin将process.env的变量中转一下,然后项目js文件中就能取到definePlugin中定义的变量。
webpack4提供了一种Mode模式, --mode production 参数会自动将definePlugin中加入process.env.NODE_ENV设置为"production",也就是省去了自己去操作这一步。除此之外,不同的mode还定制了一些其他的配置项。这与node的环境变量是两个东西,只设置Mode并不能获取node脚本中的process.env。
所以在webpack4的项目中,可以无需definePlugin就直接在项目中使用process.env.NODE_ENV,而其他版本不行。
dotenv
dotenv是一个能够读文件获取环境变量的库,文件形式有.env,.env.local,优先级也有区别。
create-react-app搭建的项目自带这个包,本身可以在node脚本中直接获取到,配合dotenv-webpack插件可以在项目中使用,导入的变量可以在项目文件中获取。
dotenv的用处在于可以自定义环境变量,不局限于mode提供的NODE_ENV,也不用definePlugin了。