为npm脚本中的环境变量分配一个随机数(UUID)值
我想在调用我的npm脚本时添加一个UUID参数。每次调用脚本时,我都要生成一个新的数字。它应该是这样的:为npm脚本中的环境变量分配一个随机数(UUID)值,npm,uuid,npm-scripts,Npm,Uuid,Npm Scripts,我想在调用我的npm脚本时添加一个UUID参数。每次调用脚本时,我都要生成一个新的数字。它应该是这样的: “构建”:“跨环境UUID=唯一的构建编号” 我唯一需要的就是在这里生成唯一的\u编号。我试图使用uuid包,但我不知道如何在脚本中启动它并将数字作为参数传递。tl;dr正如您的问题所示,我假设需要跨平台解决方案。在这种情况下,请参考解决方案A。但是,如果我的假设不正确,请参考解决方案B或C 解决方案A:跨平台(Windows/Linux/macOS…) 对于跨平台解决方案(即在Wind
“构建”:“跨环境UUID=唯一的构建编号”
我唯一需要的就是在这里生成
唯一的\u编号。我试图使用uuid包,但我不知道如何在脚本中启动它并将数字作为参数传递。tl;dr正如您的问题所示,我假设需要跨平台解决方案。在这种情况下,请参考解决方案A。但是,如果我的假设不正确,请参考解决方案B或C
解决方案A:跨平台(Windows/Linux/macOS…)
对于跨平台解决方案(即在Windows、Linux和macOS上成功运行的解决方案…),您需要利用NodeJ来实现您的需求。有几种不同的方法来实现这一点,如以下两小节所述,标题为:
- 使用外部nodejs(.js)文件
- 将JavaScript内联到package.json中
注意两种方法实际上是相同的
使用外部nodejs(.js)文件
创建nodejs实用程序脚本。让我们将文件命名为run-ng-build.js,并将其保存在项目目录的根目录中,即package.json当前所在的同一目录中:
运行ng build.js
const uuid=require('uuid/v1');
const execSync=require('child_process')。execSync;
process.env.UUID=UUID();
execSync('ng build',{stdio:[0,1,2]});
在package.json的scripts
部分,将当前的build
脚本替换为以下内容:
package.json
“脚本”:{
“生成”:“节点运行ng生成”
}
说明:
- 在run-ng-build.js中,我们需要内置的包和nodejs
- 为了创建名为
UUID
的环境变量,我们利用nodejs内置,并通过调用UUID()
为其分配一个UUID值
- 然后,我们使用
execSync
调用ngbuild
命令
- 该选项配置父进程和子进程之间的管道-
[0,1,2]
有效继承的stdin
、stdout
和stderr
将JavaScript内联到package.json中。
或者,您可以在package.json的scripts
部分内联nodejs/JavaScript代码
在package.json的scripts
部分,将当前的build
脚本替换为以下内容:
package.json
“脚本”:{
“构建”:“node-e\”process.env.UUID=require('UUID/v1')();require('child_process')。execSync('ng build',{stdio:[0,1,2]});\”
}
说明:
- 这实际上与前面提到的使用单独的
.js
文件的解决方案相同,但是现在使用单独的nodejs脚本/文件是多余的
- nodejs命令行选项用于评估内联JavaScript
重要使用上述两种解决方案中的任何一种,该软件包都是多余的。要卸载它,请通过CLI运行:npm un-D cross-env
解决方案B:*仅限Nix平台(Linux/MacOS…)
对于*nix平台,它变得非常简洁,您只需在package.json中定义构建
脚本,如下所示:
package.json
“脚本”:{
“构建”:“跨环境UUID=$(UUID)ng构建”
}
这利用了称为的Bash特性,即$(uuid)
。但是,如果*nix是您需要支持的唯一平台,那么实际上就没有必要使用cross-env
。改用内置功能。例如:
package.json
“脚本”:{
“生成”:“导出UUID=$(UUID)和ng生成”
}
解决方案C:仅限Windows(cmd.exe)
在通过命令提示符或PowerShell运行的Windows(仅限)上,您可以执行以下操作:
package.json
“脚本”:{
“构建”:“FOR/F%U IN('uuid')DO cross-env uuid=%~U node-e\”process.env.uuid=require('uuid/v1')();require('child_process')。execSync('ng buuld',{stdio:[0,1,2]});\”
}
这与解决方案B中显示的第一个示例类似,但在cmd.exe中实现的命令替换(非常)不同。请参阅此以获取进一步的解释