前端项目中设置不同环境的理解

127 阅读2分钟

最近看到项目中很多关于项目环境的代码,以前只知道要区分不同环境,却没了解过具体怎么实现,今天有时间看了下项目代码,总结一些知识。

NODE_ENV

我们经常在scripts中看见这样的代码,在使用dev命令的时候,会执行后面一串命令,他们都是有什么用呢

image.png 首先说下NODE_ENV这个东西,这个是给process.env设置一个NODE_ENV属性,也就是在页面中可以通过process.env.NODE_ENV访问当前所处的环境,因为我们会根据不同的环境(本地,测试,预发,线上)有不同的配置等信息,所以在本地启动的时候就可以这样来区分,这样设置之后就可以在其他页面进行使用这个process.env.NODE_ENV了。 这就是NODE_ENV的一个作用,不过有时候也会看见另一个命令,也就是会在前面加上cross-env

image.png

cross-env

cross-env主要是一个npm包,他的作用是使用这个命令去兼容不同的操作系统

比如:

cross-env 能够解决不同环境系统间设置环境变量的时候,命令行不一样的问题;

  • windows 使用:"SET NODE_ENV=development"
  • 在其他unix 系统使用:"EXPORT NODE_ENV=development"

所以遇到此种境地就可以使用cross-env 兼容windowsunix ,一行命令即可在不同端执行;

webpack.DefinePlugin

可以看到直接使用process.env.NODE_ENV这个变量会比较长,所以可以通过这个plugin在webpack中设置一个映射

image.png 也就是像下面这样,这样在其他文件中使用的时候就可以直接使用NODE_ENV这个变量就相当于在使用process.env.NODE_ENV了。

补充

当然这是本地启动的时候做的,那如果直接通过url去访问一个地址的,可以怎么知道或者说怎么区分当前环境呢,一个做法是可以通过正则去匹配域名的不同,从而对不同的环境配置不同的代码等

个人浅显的理解,如有错误还请大佬指正!

参考文章

juejin.cn/post/734576… juejin.cn/post/708849… juejin.cn/post/714305…