我有一个像这样的源树:
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 的 dependency
和 devDependency
,以便我可以运行它和/或开发它”,而不是“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/