需要明确的是,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.CD 或process.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.