为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

我想在调用我的npm脚本时添加一个UUID参数。每次调用脚本时,我都要生成一个新的数字。它应该是这样的:

“构建”:“跨环境UUID=唯一的构建编号”

我唯一需要的就是在这里生成
唯一的\u编号。我试图使用uuid包,但我不知道如何在脚本中启动它并将数字作为参数传递。

tl;dr正如您的问题所示,我假设需要跨平台解决方案。在这种情况下,请参考解决方案A。但是,如果我的假设不正确,请参考解决方案BC


解决方案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中实现的命令替换(非常)不同。请参阅此以获取进一步的解释