如何解决npm 私有全局范围:找不到命令
我使用需要限定范围的 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 本身之外,我已经没有想法了……
解决方法
似乎在 NPM v7+ 中使用 GitLab NPM 注册表会阻止执行 postinstall
钩子。只需将 NPM 降级,即可从 GitLab NPM 注册表进行全局安装以执行 postinstall
脚本,该脚本允许为每个 package.json.bin
条目创建符号链接。
为了解决这个问题,我们已经降级到 NPM 6.14.12
: npm install -g npm@6.14.12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。