当前位置: 首页 > news >正文

【前端工程化】理解和配置process.env.NODE_ENV,项目中的环境变量到底是个啥

内容预警,初级教程,菜鸟必看,大佬请绕道

1. 前置知识

(1)首先我们都知道package.json是node自带的包描述文件,所以在package.json中配置的内容、环境变量等,都是为node的环境服务的!

(2)在一个工程化的前端项目中,我们有node 环境 + 打包工具的环境(如vite,webpack)+ js(或vue)文件中的环境。

(3)node环境是最基础的

(4)打包工具通常有一个配置文件比如webpack.config.js,在配置文件中可以配置各种变量和打包的语法。

(5)js(或vue)文件,可以应用打包工具配置文件中配置的变量 和 node的变量,但是使用了打包工具后,由于打包工具重写了环境变量,就不能直接使用package.json中定义的环境变量了,webpack.config.js中的优先级大于package.json中的优先级。

2. package.json中配置变量

(1)【mac 电脑】在js文件中使用pacakge.json配置的环境变量

 (2)【window 电脑】在package.json中配置环境变量, 需要加一个set 

 "scripts": {
    "dev": "set NODE_ENV=new_env && node test.js"
  },

所以为了一套代码在mac和window电脑都可以使用,可以使用这个跨平台设置环境变量的npm包cross-env

cross-env - npmRun scripts that set and use environment variables across platforms. Latest version: 7.0.3, last published: 2 years ago. Start using cross-env in your project by running `npm i cross-env`. There are 5340 other projects in the npm registry using cross-env.https://www.npmjs.com/package/cross-env安装完之后,配置文件变为

 "scripts": {
    "dev": "cross-env NODE_ENV=new_env node test.js"
  },

3. 打包工具中配置环境变量

我们使用webpack作为打包工具,安装webpack,之后我们就有了第三个环境 —— 打包工具配置时候的环境。

 修改配置文件中的mode的值可以修改打包之后的环境变量,参考webpack官网

模式(Mode)

提供 mode 配置选项,告知 webpack 使用相应模式的内置优化。

string = 'production': 'none' | 'development' | 'production'

我们再试一下,同时改变package.json中的变量,打包工具webpack.config.js中的环境变量的优先级更高。

 但是我们总不能总是修改webpack.config.js中mode的值,每次打包和开发都修改,很麻烦,还是需要读取package.json中的配置才科学。

 webpack.DefinePlugin 设置其他的环境变量

所有的打包工具都可以自定义其他的环境变量供我们开发(js代码)中使用,比如webpack中使用的是DefinePlugin插件,vite使用的是define参数

 

4. 知识补充

 (1)NODE_ENV常用,但不是node自带的环境变量

 (2)使用了打包工具,有了配置文件webpack.config.js之后,package.json中配置的其他环境变量,如果没在配置文件webpack.config.js中定义,也不能使用

 关于更多package.json的知识可以参考我的文章

【前端工程化】配置package.json中scripts命令脚本,新手必学_我有一棵树的博客-CSDN博客_package.json scripts配置【前端工程化】配置package.json中scripts命令脚本,新手必学https://blog.csdn.net/qq_17335549/article/details/126784270关于package.json 和package-lock.json_我有一棵树的博客-CSDN博客_package-lock.json和package.json每日鸡汤,每个你想要学习的念头都是未来的你向自己求救一直在纠结,每次pull 完代码之后重新install , package-lock.json就改变了,那么我改完代码之后需要把这个package-lock.json提交么?让我们先来来看看package.json每个包前面的^ 代表 大版本的依赖包^1.2.3中的1~ 代表次要版本号 ~1.2.3中的2如果什么符号都不加则是指定版本,这也就是说的锁定版本,好处是避免包更新带来的bug指定安装版本npm install xx@1..https://blog.csdn.net/qq_17335549/article/details/116699339

相关文章:

  • CVPR 2022 Oral 大连理工提出的SCI 快速、超强的低光照图像增强方法 亲测效果
  • cuda remove
  • CSS进阶篇——更多选择器 (selectors)
  • 嵌入式-ESP32
  • matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
  • JDBC编程六步、IDEA开发的第一个JDBC程序
  • 强化学习——day35 读论文:基于深度强化学习的网约车动态路径规划
  • 【408计算机组成原理】—原码、反码、补码、移码(六)
  • Vue入门【九】-- 动态路由和嵌套路由
  • Python数据类型:序列(列表list、元组tuple)
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • 算法分析与设计:10 大排序算法大汇总(Java)
  • 【斯坦福大学公开课CS224W——图机器学习】六、图神经网络1:GNN模型
  • Google Earth Engine(GEE)——GEE错误结果没有变化?
  • 《Improved Techniques for Training GANs》-论文阅读笔记
  • [数据结构]链表的实现在PHP中
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Docker入门(二) - Dockerfile
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES学习笔记(12)--Symbol
  • Git 使用集
  • JavaScript DOM 10 - 滚动
  • k个最大的数及变种小结
  • Linux gpio口使用方法
  • Netty 4.1 源代码学习:线程模型
  • 爱情 北京女病人
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 小而合理的前端理论:rscss和rsjs
  • 延迟脚本的方式
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 积累各种好的链接
  • 数据可视化之下发图实践
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (C语言)fread与fwrite详解
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (NSDate) 时间 (time )比较
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (四)Android布局类型(线性布局LinearLayout)
  • (原創) 物件導向與老子思想 (OO)
  • (转)socket Aio demo
  • .net core Swagger 过滤部分Api
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net MVC + EF搭建学生管理系统
  • .NET 的程序集加载上下文
  • .net6 webapi log4net完整配置使用流程
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET委托:一个关于C#的睡前故事
  • .Net下的签名与混淆
  • .Net小白的大学四年,内含面经