node.js - `npm install <folder>` 不是 't behave the same as ` cd <folder> && npm install`

标签 node.js npm

我有一个像这样的源树:

myapp
├── nodestuff1
|    └── package.json
└── nodestuff2
     └── package.json

nodestuff1/package.json 包含以下内容:

"prepublish": "npm install ../nodestuff2"

nodestuff2/package.json 包含以下内容:

"devDependencies": {"uglify-js": "2.3.x"}

我的工作流程应该是cd myapp/nodestuff1 && npm install,它应该首先安装nodestuff2,然后安装nodestuff1。然而...

  • myapp/nodestuff2 中运行 npm install 会安装 devDependency,而
  • 运行npm install ../nodestuff2不会安装devDependency。

现在,我将 prepublish 脚本更改为 cd 到 nodestuff2 并在那里运行 npm install,然后 cd 返回到 nodestuff1 并运行 npm install ../nodestuff2,以便将其复制到 nodestuff1/node_modules

这是一个错误吗?有更好的解决办法吗?

最佳答案

首先,了解“cd someproject && npm install”的语义意味着“安装 someproject 的 dependencydevDependency,以便我可以运行它和/或开发它”,而不是“npm install ../someproject”,这意味着“在当前目录中安装 someproject,以便我可以从我的项目或 repl 中使用它”,后者不会安装 devDependency。这些对我个人来说很有意义,但对您来说可能直观,也可能不直观,但无论哪种情况,npm 都是这样工作的。

现在,对于你的包,如果我理解你想要做的就是当你将其发布到 npm 时,在nodestuff1 中预捆绑nodestuff2。不要那样做。相反,只需将nodestuff2列为nodestuff1/package.json中nodestuff1的依赖项即可。你想在这里做一些不寻常的事情吗?如果您提供您想要完成的任务的更大背景,那么人们会更容易发布答案。我的印象是,您正在违背 npm 的原则工作,但您没有提供足够的背景信息让我真正评估您正在做的事情。

关于node.js - `npm install <folder>` 不是 't behave the same as ` cd <folder> && npm install`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920385/

相关文章:

node.js - 为什么 npm 的名字不是 Node Package Manager?

javascript - 为什么 Gulp.js 除了全局安装外还需要本地安装?

javascript - 在 Node 中处理大量数据的最快方法

javascript - 为什么我的代码可以在标准 Node.js 文件中运行,而不能在 AWS Lambda 函数中运行?

javascript - expressjs server.js 这是未定义的,我如何引用服务器

node.js - 如何从 Node js将数据发送到azure事件网格中的主题端点

javascript - Javascript中promise和@@iterator的问题

npm - 如何将 npm 参数传递给 dotnet publish?

javascript - Bower 和 NPM 如何结合在一起?

mysql - 无法从 Node 但从终端访问mysql容器