NODE_ENV到底是个什么玩意??

NODE_ENV到底是个什么玩意??

2023年7月7日发(作者:)

NODE_ENV到底是个什么玩意??技术上讲,

NODE_ENV是⼀个由 暴露给执⾏脚本的系统环境变量。通常⽤于确定在开发环境还是⽣产环境(dev-vs-prod)下,服务器⼯具、构建脚本和客户端 library 的⾏为。NODE_ENV会赋值给对象,作为它的⼀个属性,其值通常为“production”(⽣产环境)和“development”(开发环境),或者“prod”和“dev”,以此来区分不同环境下的逻辑⾏为,例如:if(_ENV === 'development'){

//开发环境 do something}else{ //⽣产环境 do something}实际上对象是不存在这个属性的,打印()可知:[ "TERM_SESSION_ID", "SSH_AUTH_SOCK", "Apple_PubSub_Socket_Render", "COLORFGBG", "ITERM_PROFILE", "XPC_FLAGS", "PWD", "SHELL", "LC_CTYPE", "TERM_PROGRAM_VERSION", "TERM_PROGRAM", "PATH", "COLORTERM", "TERM", "HOME", "TMPDIR", "USER", "XPC_SERVICE_NAME", "LOGNAME", "__CF_USER_TEXT_ENCODING", "ITERM_SESSION_ID", "SHLVL", "OLDPWD", "ZSH", "ANDROID_SDK_ROOT", "ANDROID_HOME", "PAGER", "LESS", "LSCOLORS", "NVM_DIR", "NVM_CD_FLAGS", "NVM_BIN", "PUB_HOSTED_URL", "FLUTTER_STORAGE_BASE_URL", "_"]然⽽_ENV可⽤,是前端⼯程化过程中⼤家约定俗成的做法,尤其是webpack构建前端⼯程时,会经常使⽤。那这个属性是什么时候赋值给的呢?以webpack的⼯程为例,通常是运⾏脚本时来做这件事,例如中的脚本:"scripts": { "test": "echo "Error: no test specified" && exit 1", "dev": "NODE_ENV=development webpack --watch ", "build": "NODE_ENV=development webpack --mode=production" },说明:NODE_ENV=development在windows环境下会报错,需要改为set NODE_ENV=production,为了解决这个差异,可以使⽤cross-env跨平台的设置和使⽤环境变量,这⾥就不解释具体使⽤⽅法了。这样,就可以在中使⽤_ENV了,但是不能在引⼊的模块中使⽤,要想在模块当中直接使⽤,我们还需要⼀些配置。webpack4之前可以使⽤DefinePlugin插件配置// t webpack = require('webpack');s = { entry: { app: './src/app' }, output: { path: 'dist', filename: '' }, plugins: [ new Plugin({ '_ENV': ify(_ENV) }) ]};webpack4版本之后可以通过mode选项实现s = { // 定义环境变量 mode: 'development', // JavaScript 执⾏⼊⼝⽂件 entry: './', output: { // 把所有依赖的模块合并输出到⼀个 ⽂件 filename: '', // 输出⽂件都放到 dist ⽬录下 path: e(__dirname, './dist'), },

};这⾥有个需要注意的点:通过npm script 定义的NODE_ENV和 通过DefinePlugin、mode选项定义的NODE_ENV是两个相互独⽴的存在,NODE_ENV=development这种⽅式定义的NODE_ENV只能在当前脚本中⽣效,是个runtime(运⾏时)。假如的mode设置为production,脚本中执⾏NODE_ENV=development,那么在模块中NODE_ENV的值为production,⽽配置⽂件中的NODE_ENV值为development。如果没有在脚本中设置环境变量,只设置了mode,在webpack的配置⽂件中读取_ENV为undefined,因此,例如_ENV === 'production' ? '[name].[hash].' : '[name].'这样的条件语句,在 webpack 配置⽂件中,⽆法按照预期运⾏。上⾯的话可能不好理解,总结起来就是,DefinePlugin和mode选项定义的NODE_ENV 作⽤于webpack⼊⼝⽂件下的业务代码,通常为src⽂件夹下的代码, ⽽ npm脚本⾥的设置多⽤于配置相关,例如在⾥区分环境配置不同插件。请查看 #2537

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688684895a162435.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信