3

我正在使用 npm+node 进行一些简单的脚本编写。最小示例:我有一个节点项目目录(我在其中运行 npm init),其中包含script.jspackage(-lock)?.jsonnode_modules具有依赖项的目录。我从 cmdline 运行这个脚本node "C:/path-to-project/script.js"

我想在两台计算机之间共享这个脚本。我决定使用 npm 并将我的脚本发布到注册表。

问题:

MAIN)在另一台机器上安装包,将其node_modules与其依赖项一起放入,因此不能像在原始机器上那样从主项目目录中使用。下载具有所需目录结构的包,但主项目(= script.js)npm-pack没有更多功能。npm-update

SECONDARY)我正在使用本地依赖项,它作为链接添加到node_modules. 我想将其保留为原始计算机上的本地链接,但第二次从注册表安装它。依赖项也已发布,但是在第二台电脑上安装时,npm 失败并Could not install from "node_modules\utils" as it does not contain a package.json file.显示包是作用域的,因此没有命名冲突,并且在此处报告了类似的错误https://github.com/npm/npm/issues/ 18266

那么实现我的目标的正确方法是什么?主要是关于将其安装为主项目而不是依赖项的第一部分,同时保持更新到新版本的能力。

4

2 回答 2

0

一个可能的解决方案是创建一个节点驱动的 cli 工具。

这是一个关于如何在 node.js 中构建 cli 工具的教程。您最终将在全球范围内安装该工具,并且它将作为二进制文件从您的 cli 中提供。

https://www.twilio.com/blog/how-to-build-a-cli-with-node-js

于 2020-02-10T19:01:46.183 回答
0

发布为可执行 CLI

在 package.json 中启用 bin 选项发布包。您需要 bin 选项指向一个带有 shebang 节点的脚本,该脚本具有 exec 权限并运行项目。

这将允许您将包作为可执行文件运行。

在本地安装包并使用 npm 脚本运行

然后,您可以将包作为本地依赖项安装到另一个项目中,npm i并创建一个 npm 脚本以将包作为脚本运行。当您为 NPM 脚本指定要运行的命令的名称时,NPM 脚本会在您$PATH的以及本地项目中查找。node_modules/.bin所以从 npm 脚本中,它会找到你的包的名称(或者你在设置它的 bin 条目时使用的命令名称)

NPM 脚本文档

除了 shell 预先存在的 PATH 之外,npm run 还将 node_modules/.bin 添加到提供给脚本的 PATH 中。本地安装的依赖项提供的任何二进制文件都可以在没有 node_modules/.bin 前缀的情况下使用。

这意味着您不必在全局范围内安装该软件包,并且可以将其作为项目的本地依赖项保存,您可以在其中使用npm update. (如果仅在开发期间使用,请将其安装为dev-dependency。)

至于你的第二个问题,我不确定如何重现它,我建议打开第二个问题来具体询问。

于 2020-02-13T02:16:23.457 回答