【问题标题】:How to resolve path in env variable in package.json?如何解析 package.json 环境变量中的路径?
【发布时间】:2018-06-22 16:25:50
【问题描述】:

在节点中,我想将process.env 上的START_DIR 设置为process.cwd()。

如何在脚本package.json 中做到这一点?

例如,我不能使用 env 文件。这个应用程序没有使用 env 文件加载器,我无法改变它。

例如:

"scripts": {
    "start": "set SOMEDIR=process.cwd() && node app",

....

console.log('res', process.env.START_DIR);

【问题讨论】:

    标签: javascript node.js environment-variables


    【解决方案1】:

    需要明确的是,process.env 代表 Node 进程在运行时的环境,因此 Node 进程可见的任何环境变量都可以在您的模块中以process.env.WHATEVER_VAR 的形式访问。

    为什么不直接从您的应用代码中调用process.cwd()?它将返回您执行节点命令的路径,或者在本例中为npm start。了解更多关于你想要完成的事情会很有帮助,因为我不明白你为什么想做我认为你正在尝试做的事情。

    如果你真的想要完全按照你描述的做,你可以使用node -e "console.log('something')"来输出something到shell。以下是当您从希望process.cwd() 返回的目录中的 bash shell 中运行npm start 时的外观。 (我不确定 Windows 等价物):

    "start": "export START_DIR=$(node -e \"console.log(process.cwd());\") && node app"

    不过还有其他选择。您可以参考操作系统的内置变量表示工作目录。看起来您可能使用的是 Windows,因此该变量的名称将是 CD。我相信完整的命令看起来像这样:

    set SOMEDIR=%CD% && node app

    或者,如果您从 bash shell(Linux 和 MacOS)启动进程:

    export SOMEDIR=$PWD && node app

    您也可以直接在脚本中使用process.env.CDprocess.env.PWD 访问这些变量。

    这种方法的唯一危险是它假定CD / PWD 没有被手动设置为其他值。在 Windows 中,规避此问题的一种方法是在您调用 npm start 的任何位置创建一个批处理文件。在文件中,执行相同的命令,但将%CD% 替换为%~dp0,即refers to the path containing the file. 然后将start 设置为Windows 命令以执行文件,类似于call ./file.bat

    同样,在 bash 环境中创建一个 shell 脚本并使用 $(dirname $0) 而不是 $PWD。使用chmod +x name_of_file 使其可执行并将start 设置为bash ./name_of_file

    最后一件事:如果变量的名称无关紧要,package.json 可以告诉 npm 创建以 npm_config_ 为前缀的环境变量。更多信息在npm config documentation.

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 2016-04-11
      • 2017-09-25
      • 1970-01-01
      • 2018-01-04
      相关资源
      最近更新 更多