【问题标题】:npm install package as master project, not as dependencynpm install package 作为主项目,而不是依赖项
【发布时间】:2020-05-06 23:26:43
【问题描述】:

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

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

问题:

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

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。

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

【问题讨论】:

    标签: node.js npm npm-install dependency-management npm-registry


    【解决方案1】:

    作为可执行 CLI 发布

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

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

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

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

    来自NPM scripts docs:

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

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

    至于您的第二个问题,我不知道如何重现它,我建议您打开第二个问题专门询问它。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-02-22
        • 1970-01-01
        • 2013-08-21
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        • 2019-12-03
        相关资源
        最近更新 更多