首页 > 编程语言 >nodeJs 常用库之 cross-env

nodeJs 常用库之 cross-env

时间:2023-05-18 17:47:24浏览次数:46  
标签:npm nodeJs -- cross start env 环境变量

楔子

为什么会注意到这个库呢?

起因是因为,在公司的项目 package.json 看到 启动或者编译的命令是这样写的

"start": "cross-env NODE_ENV=development SERVICE_NAME=testServer nest start",
"start:dev": "cross-env NODE_ENV=development SERVICE_NAME=testServer nest start --watch",
"start:debug": "cross-env NODE_ENV=development SERVICE_NAME=testServer nest start --debug --watch",

而正常的NestJs 启动命令是这样的

"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",

有没有发现多点东西,那这些多的东西有啥用呢?

其实就是环境变量,既然是环境变量直接卸载.env 不就行了,为啥要用 cross-env库来实现?带这个问题,我们接着往下看

cross-env 为什么会出现

cross-env 的出现是因为在跨平台开发时,不同的操作系统使用不同的命令语法来设置环境变量

这会导致在编写 npm scripts 时需要编写多个命令,增加了项目维护的难度。

同时,如果我们将项目分享给其他人,他们可能需要对不同的平台进行适配。

为了解决这个问题,cross-env 库被创建出来,它提供了一个简单的解决方案

可以在所有平台上都使用相同的命令语法设置环境变量,而无需担心跨平台问题,大大简化了项目维护的难度,提高了开发效率。

通过使用 cross-env,开发者可以在 npm scripts 中指定环境变量,而无需考虑不同平台下的差异。

同时,cross-env 还支持嵌套命令,可以方便地进行复杂的环境变量设置。

cross-env 解决了那些问题

跨平台环境变量设置问题

在不同的操作系统下,设置环境变量的命令语法是不同的

比如在 Windows 下使用 set 命令,在 Linux 或 Mac 下使用 export 命令。

这会导致在编写 npm scripts 时需要编写多个命令,增加了项目维护的难度。

同时,如果我们将项目分享给其他人,他们可能需要对不同的平台进行适配。

cross-env 可以在所有平台上都使用相同的命令语法设置环境变量,而无需担心跨平台问题,大大简化了项目维护的难度,提高了开发效率。

命令行参数传递问题

在 npm scripts 中,我们可以通过 $npm_package_config_ 前缀来访问 package.json 文件中的配置项

例如 $npm_package_config_port 可以获取 package.json 中定义的 port 配置项的值。

但是如果我们需要传递一些命令行参数,例如 --watch--reporter 等,就不能直接通过 $npm_package_config_ 前缀来访问了。

cross-env 可以帮助我们解决这个问题,它支持嵌套命令,可以方便地进行复杂的环境变量设置,并且支持在命令行中传递参数。

例如:

"scripts": {
  "test": "cross-env NODE_ENV=test mocha --watch --reporter spec"
}

上述代码中,我们在 mocha 命令后添加了 --watch--reporter spec 参数,这些参数可以在 npm scripts 中进行传递,并且能够跨平台正常工作。

cross-env 官网

https://github.com/kentcdodds/cross-env

cross-env 安装

npm install --save-dev cross-env

案例

package.json

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "cross-env NODE_ENV=dev DB_CONNECTION_STRING=mongodb://dev:27017/myapp-dev node app.js",
    "test": "cross-env NODE_ENV=test DB_CONNECTION_STRING=mongodb://test:27017/myapp-test node app.js",
    "prod": "cross-env NODE_ENV=prod DB_CONNECTION_STRING=mongodb://prod:27017/myapp node app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "lodash": "^4.17.21",
    "moment": "^2.29.4"
  },
  "devDependencies": {
    "cross-env": "^7.0.3"
  }
}

app.js

console.log(process.env.NODE_ENV,process.env.DB_CONNECTION_STRING);

执行

npm run dev
npm run test
npm run prod

image-20230518172548806

标签:npm,nodeJs,--,cross,start,env,环境变量
From: https://www.cnblogs.com/makalochen/p/17412613.html

相关文章

  • nodejs将hex文件转bin文件
    constfs=require('fs');fs.readFile('./SmartLockMain.hex','utf-8',(err,data)=>{if(err)throwerr;constlines=data.split('\n');constoutBuffer=[];for(constlineoflines){......
  • APRIL 2022-Explanation-Aware Experience Replay in Rule-Dense Environments
    I.INTRODUCTION解释是人类智能的关键机制,这种机制有可能提高RL代理在复杂环境中的表现实现这一目标的一个核心设计挑战是将解释集成到计算表示中。即使在最小的规则集变化下,将规则集(或部分规则集)编码到智能体的观察空间等方法也可能导致严重的重新训练开销,因为规则的语义被......
  • npm 工具库 yenv 简介
    "yenv"是一个JavaScript库,它是在Node.js环境中使用的npm包之一。它的目的是从环境变量中加载配置,以便在Node.js应用程序中使用。使用yenv,您可以在不同的环境中配置不同的变量,并根据需要轻松地加载这些变量。这些环境可以是开发、测试、生产等等。它也支持默认值和类型......
  • nodejs 入门基本操作
    操作fs模块constpath=require("path");constfs=require("fs");/*相对路径是命令窗口执行的目录node提供了path模块来操作路径相关的api,其中__dirname是一个内置的变量,返回当前文件所在的目录*/constgetDirUrl=dir=>{returnpath.resolve(__dirname,dir)......
  • delphi Pascal yolov5 deepsort 目标检测 目标跟踪,支持onnxruntime、dnn、openvino和t
    delphiPascalyolov5deepsort目标检测目标跟踪,支持onnxruntime、dnn、openvino和tensorrt推理yolov5,使用c++封装成dll,delphi调用封装好的dll,实现目标检测和跟踪ID:212600676471966472......
  • yolov5v6.2 实例分割 Labview工业应用,封装dll后labview调用,支持openvino dnn onnxrunt
    yolov5v6.2实例分割Labview工业应用,封装dll后labview调用,支持openvinodnnonnxruntime和tensorrt四种方式推理,500万像素图像:cpu下openvino推理只要85ms、GPU下tensorrt推理只要25ms,最强实例分割模型。ID:114500689839116112......
  • nodejs 入门基本概念
    nodejs的诞生  Node.js是2009的时候由大神RyanDahl开发的。Ryan的本职工作是用C++写服务器,后来他总结出一个经验,一个高性能服务器应该是满足“事件驱动,非阻塞I/O”模型的。C++开发起来比较麻烦,于是Ryan就想找一种更高级的语言,以便快速开发。  Ryan发现JS语......
  • 【nodejs基础】Expres编写接口详解05
    一、使用Express写接口浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域接口的跨域问题刚才编写的GET和POST接口,存在一个很严重的问题:不支持跨域请求,解决接口跨域问题的方案主要有两种CORS(主流解决方案,推荐)JSONP(有缺陷:只支持GET请......
  • nodejs
    node.js学习笔记1fs模块概念fs全称为filesystem,称之为文件系统,是Node.js中的内置模块,可以对计算机中的磁盘进行操作。文件写入文件写入就是将数据保存到文件中,我们可以使用如下几个方法来实现该效果方法说明writeFile异步写入writeFileSync同步写入......
  • 《nodejs跨栏》vue篇——vue简介
    Vue读音读作viewVue文件结构参考链接:https://www.runoob.com/vue2/vue-directory-structure.html其中App.vue代码如下:点击查看代码<!--展示模板--><template><divid="app"><imgdecoding="async"src="./assets/logo.png">......