在相邻目录运行NPM脚本时如何保留当前工作目录
解决方案
首先明确问题原因:npm run的--prefix参数会默认将脚本的运行工作目录切换到指定的prefix路径,才会导致FolderA里的代码读取到的process.cwd()是FolderA的路径,而非你执行命令时所在的FolderB路径。
你可以根据自己的场景选择以下任意一种方法实现需求:
方案1:修改FolderA的index.js代码(跨平台最稳妥)
直接在FolderA的index.js最顶部添加一行代码,主动切换工作目录到npm命令执行时的原始路径:process.chdir(process.env.INIT_CWD ?? process.cwd());INIT_CWD是npm执行时自动注入的环境变量,固定存储你执行npm命令时所在的目录,也就是你需要的FolderB路径。添加这行代码后,后续所有业务代码的运行效果和直接在FolderB下执行完全一致。方案2:修改FolderA的package.json脚本(无需改动业务代码)
只需要修改FolderA的package.json中的start脚本,运行时先切换回原始工作目录再执行业务逻辑即可:- 类Unix/Mac环境写法:
{ "scripts": { "start": "cd \"$INIT_CWD\" && node index.js" } }- Windows cmd环境写法:
{ "scripts": { "start": "cd /d \"%INIT_CWD%\" && node index.js" } }- 全平台兼容写法:先安装
cross-cd依赖,再修改脚本:
{ "scripts": { "start": "cross-cd \"$INIT_CWD\" && node index.js" } }方案3:完全不修改FolderA的内容,直接调整执行命令
如果你的start脚本仅为启动index.js,不需要依赖package.json里的其他配置,直接在FolderB下执行以下命令即可,天然保留FolderB作为工作目录:node ../FolderA/index.js
内容的提问来源于stack exchange,提问作者theFlyingCoder
相关产品推荐
相关产品推荐

