【发布时间】: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