【问题标题】:npm private global scoped : command not foundnpm private global scoped:找不到命令
【发布时间】:2021-04-15 18:55:13
【问题描述】:

我使用 GitLab NPM Package Repository 发布了一个私有 NPM 包,它需要限定范围。

这个包应该添加一个全局可用的sspm 命令以作为 CLI 工作。

当我使用npm install -g @{ORG}/{PACKAGE_NAME} 从存储库安装它时,它被正确添加到/usr/local/lib/node_modules/@{ORG}/{PACKAGE_NAME} 下并且文件似乎正确,但是当我运行以下命令之一时,找不到该命令:

# zsh: command not found: sspm ​
sspm
@{ORG}/sspm
@{ORG}\/sspm

但是如果我使用项目路径而不是它的名称来全局安装包,它可以工作(即使当我使用它的名称安装它时,文件也被正确下载)

这就是我在此之前尝试过的所有内容

npm install -g @{ORG}/{PACKAGE_NAME}
sspm # command not found

npm uninstall -g @{ORG}/{PACKAGE_NAME}

npm install -g ./ # Installing the project from its project directory
sspm # WORKS

这是我的package.json 文件:

{
  "name": "@{ORG}/{PACKAGE_NAME}",
  "version": "1.0.0",
  "main": "src/index.js",
  "publishConfig": {
    "@{ORG}:registry": "https://gitlab.com/api/v4/projects/.../packages/npm/"
  },
  "bin": {
    "sspm": "./bin/main.js"
  },
  "scripts": {...},
  "repository": {
    "url": "https://gitlab.com/..."
  },
  "bugs": {
    "url": "https://gitlab.com/..."
  },
  "homepage": "https://gitlab.com/...,
  "devDependencies": {...},
  "dependencies": {...}
}

更新(2021-04-20)

检查 NPM 位置的命令(通过运行 npm bin -g 找到)结果表明没有为此包创建符号链接。我的 NPM 配置显示 bin-links 选项已正确设置为 true。

我还尝试使用相同的 package.json 语法在 npmjs.com 上发布示例公共包,并且我的命令在安装后全局可用。当我在 GitLab NPM 注册表上发布完全相同的包时,安装后找不到该命令。

作为一种解决方法,我尝试将 scripts.postinstall 条目添加到我的 package.json 中,这应该为每个缺失的 bin 条目创建缺失的符号链接。但事实证明,安装后脚本没有执行,而 NPM 文档说它应该执行

所以,除了责备 GitLab NPM Registry 本身之外,我的想法已经不多了……

【问题讨论】:

    标签: node.js npm gitlab npm-install


    【解决方案1】:

    Resolution Thread source

    似乎使用带有 NPM v7+ 的 GitLab NPM 注册表会阻止执行 postinstall 挂钩。只需降级 NPM,即可从 GitLab NPM 注册表进行全局安装,以执行 postinstall 脚本,该脚本允许为每个 package.json.bin 条目创建符号链接。

    为了解决这个问题,我们已经降级为 NPM 6.14.12 : npm install -g npm@6.14.12

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 2016-02-08
      • 2017-03-20
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多