从子目录运行父npm脚本时如何找到原始目录?

时间:2019-06-22 22:22:44

标签: node.js npm

我有一个相当标准的Web应用程序结构,该结构使用npm执行一些node.js测试脚本。另外,npm允许您从子目录执行父程序包脚本。

例如:

|-- my-app
|   |-- package.json
|   |-- test-script.js
|   |-- component-one
|   |   |-- test-one.spec.js
|   |-- component-two
|   |   |-- test-two.spec.js

> /my-app/component-one: npm run test
# Runs test-script.js as specified in root package's scripts

我希望能够确定运行脚本的原始子文件夹。但是,我还没有找到访问该目录的方法。 process.cwd()__dirname都返回脚本的父级目录位置(在示例中为 my-app )。

我的主要用例是过滤测试以仅在当前子目录中运行测试,因此为每个子目录添加单独的脚本来运行是不现实的。

1 个答案:

答案 0 :(得分:0)

来自npm docs:

  

脚本从模块的根目录运行,无论您使用什么脚本   当前的工作目录是当您调用npm run时。如果你想要你的   脚本以根据您所在的子目录使用不同的行为,   您可以使用function Sweetalert1(){ var name = document.getElementById("name"); var message = document.getElementById("message"); var email = document.getElementById("email"); if ((name != "" && message != "" && email != "") { Swal.fire( 'Köszönjük!', 'Megkaptuk a leveledet és hamarosan válaszolunk!', 'success' } } 环境变量,该变量包含完整的   运行npm运行时所处的路径。

pull request:

中的文档

INIT_CWD将当前工作目录添加到npm run。您可以在项目的子目录中运行脚本。例如,您要在特定的子目录中运行babel。您应该写:

INIT_CWD

或者您可以写:

"scripts": {
  "build": "babel $INIT_CWD/src -d $INIT_CWD/lib"
}

现在,您可以在要编译JavaScript的任何子目录中运行脚本"scripts": { "build": "cd $INIT_CWD && babel src -d lib" } 。就您而言,您可能需要将cwd作为参数传递给脚本,并覆盖npm run build变量。