【问题标题】:How to execute 'npm link' directly on install如何在安装时直接执行“npm link”
【发布时间】:2017-07-11 04:03:23
【问题描述】:

我有一个内部项目,我想将命令链接到带有bin 的文件。喜欢这个package.json

{
  "name": "my-project",
  "bin": {
    "cli-name": "./bin/my-executable.js"
  },
  "dependencies": {
    "node-red": "^1.0.0"
  }
}

执行npm install时,会安装所有依赖,同时也会创建node-redbin配置。

但我自己的bin 将被完全忽略。在cmd 中不能使用cli-name。在第二步中也需要执行npm link。然后cli-name 将在控制台中作为命令可用。我什至尝试使用npmpostinstall 脚本,其中包含npm link,但后来我得到了一个循环......

有没有办法在npm install 上一步完成?

【问题讨论】:

    标签: node.js npm npm-install package.json npm-link


    【解决方案1】:

    试试npm ln。 npm 文档中 npm link 的别名,在 PowerShell 5 上为我工作。

    npm-link documentation.

    【讨论】:

      【解决方案2】:

      实际上似乎没有内置方法可以自动执行此任务。因此,我直接向npm 创建了对该功能的请求。好像可以实现npm il 这样的新命令。

      当这种或其他方式可用时,我会在此处更新。

      https://github.com/npm/npm/issues/15999

      【讨论】:

        【解决方案3】:

        为了运行 global 二进制 (bin) 模块,您需要全局安装它。

        npm -g install

        https://bretkikehara.wordpress.com/2013/05/02/nodejs-creating-your-first-global-module/

        另一个选项(如果您在 linux 上)是使用 $(npm bin)/<module>,如果它没有全局安装。

        【讨论】:

        • 感谢您的反馈。但我认为仅针对链接二进制文件在全球范围内安装所有内容并不是最好的建议(我什至没有测试过这是否有效)。 npm link 也可以在没有全局安装的情况下工作。所以我希望有更好的方法......
        • 您可以在没有-g 的情况下运行二进制文件,这是最简单的方法,$(npm bin) 将在不全局安装的情况下解析二进制文件。
        【解决方案4】:

        npm-link 确实是为了不同的目的。在你执行 npm install 的那一刻,你应该已经可以在命令行中使用它了。

        npm 链接用于将你当前的开发文件夹链接到你的包的安装目录。这样,当您在开发文件夹中进行更改时,它会自动在 cli 上可用,您无需重新安装。

        安装后,尝试进入 usr/local/bin

        【讨论】:

          【解决方案5】:

          您可以在 package.json 中创建一个脚本,以便在一个命令中完成这两项任务,如下所示:

          {
            "name": "my-project",
            "bin": {
              "cli-name": "./bin/my-executable.js"
            },
            "scripts": {
              "install-link": "npm install && npm link my-project"
            },
            "dependencies": {
              "node-red": "^1.0.0"
            }
          }
          

          然后只需运行npm run install-link,它就会同时运行这两个命令。

          【讨论】:

          • 您好,感谢您的回复。但这正是我不想拥有的。
          • 如果这不是您想要的并且postinstall 对您不起作用,我认为您在这里唯一的选择是,如果您“坚持”修改npm install 的行为,是 fork npm repo 并在那里进行更改,或者创建拉取请求,并成为贡献者。虽然只是为了能够将命令/功能链接在一起,但这似乎有点过头了。
          【解决方案6】:

          您可以尝试将您的package.json 更改为以下内容:

          {
            "name": "my-project",
            "script": {
              "cli-name": "./bin/my-executable.js",
              "postinstall": "npm run cli-name"
            },
            "dependencies": {
               "node-red": "^1.0.0"
            }
          }
          

          然后运行:

          npm install
          

          【讨论】:

          • 感谢您的回答。但这不是我想要的。我需要一个自己的注册名称,而不是 npm 执行脚本。我想要与运行 npm link 相同的结果。
          • 我的错,没看懂那部分
          • @eisbehr 是否有理由不能将npm link 用作postinstall 脚​​本? postinstallinstall 之后由 npm 自动执行。 docs.npmjs.com/misc/scripts 编辑:我看到你最终陷入了无限循环,我也是。
          • 这个答案实际上帮助了一个不相关的问题:)
          猜你喜欢
          • 2013-07-04
          • 1970-01-01
          • 2018-08-08
          • 1970-01-01
          • 2023-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多