Node.js npm专用全局作用域:未找到命令
我使用发布了一个私有NPM包,需要确定其范围 此软件包应该添加一个全局可用的Node.js npm专用全局作用域:未找到命令,node.js,npm,gitlab,npm-install,Node.js,Npm,Gitlab,Npm Install,我使用发布了一个私有NPM包,需要确定其范围 此软件包应该添加一个全局可用的sspm命令,以用作CLI 当我使用npm install-g@{ORG}/{PACKAGE_NAME}从存储库安装它时,它被正确地添加到/usr/local/lib/node_modules/@{ORG}/{PACKAGE_NAME}下,并且文件似乎正确,但是当我运行以下命令之一时,找不到该命令: #zsh:未找到命令:sspm sspm @{ORG}/sspm @{ORG}\/sspm 但是,如果我使用项目路径而
sspm
命令,以用作CLI
当我使用npm install-g@{ORG}/{PACKAGE_NAME}
从存储库安装它时,它被正确地添加到/usr/local/lib/node_modules/@{ORG}/{PACKAGE_NAME}
下,并且文件似乎正确,但是当我运行以下命令之一时,找不到该命令:
#zsh:未找到命令:sspm
sspm
@{ORG}/sspm
@{ORG}\/sspm
但是,如果我使用项目路径而不是名称全局安装包,它就可以工作(即使我使用其名称安装包时,文件已正确下载)
这是我在这之前所做的一切
npm安装-g@{ORG}/{PACKAGE_NAME}
未找到sspm#命令
npm卸载-g@{ORG}/{PACKAGE_NAME}
npm install-g./#从项目目录安装项目
sspm工程
这是我的package.json
文件:
{
“名称”:“@{ORG}/{PACKAGE_name}”,
“版本”:“1.0.0”,
“main”:“src/index.js”,
“publishConfig”:{
“@{ORG}:注册表”:”https://gitlab.com/api/v4/projects/.../packages/npm/"
},
“bin”:{
“sspm”:“/bin/main.js”
},
“脚本”:{…},
“存储库”:{
“url”:”https://gitlab.com/..."
},
“臭虫”:{
“url”:”https://gitlab.com/..."
},
“主页”:https://gitlab.com/...,
“依赖性”:{…},
“依赖项”:{…}
}
更新(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注册表本身,我已经没有想法了
似乎将GitLab NPM registry与NPM v7+一起使用会阻止执行postinstall
钩子。只需降级NPM,即可从GitLab NPM注册表进行全局安装,以执行postinstall
脚本,该脚本允许为每个package.json.bin
条目创建符号链接
为了解决这个问题,我们已经降级到NPM6.14.12
:NPM安装-gnpm@6.14.12