Node.js 作用域NPM包二进制文件未添加到路径
使用新的NPM私有包和范围包。但是,安装时,项目箱将不再添加到路径中 这在路径中可用的工具下起作用Node.js 作用域NPM包二进制文件未添加到路径,node.js,npm,Node.js,Npm,使用新的NPM私有包和范围包。但是,安装时,项目箱将不再添加到路径中 这在路径中可用的工具下起作用 { name: 'hello', bin: { 'hello':'hello.js' } } 一旦添加了范围,这就不起作用了 { name: '@private/hello', bin: { 'hello':'hello.js' } } 错误是: -bash: /usr/local/bin/hello: No such file or directory 箱子路径是否需要更改 更新:
{
name: 'hello',
bin: { 'hello':'hello.js' }
}
一旦添加了范围,这就不起作用了
{
name: '@private/hello',
bin: { 'hello':'hello.js' }
}
错误是:
-bash: /usr/local/bin/hello: No such file or directory
箱子路径是否需要更改
更新:npm链接的作用是:
/usr/local/bin/hello -> /usr/local/lib/node_modules/@private/hello/hello.js
/usr/local/lib/node_modules/@private/hello -> /Path/To/HomeDirectory/SourceFolder.git
似乎对我有用
$ cat package.json
{"name":"@isaacs/foo","bin":{"foo":"foo.js"},"version":"1.2.3"}
$ npm link
/usr/local/bin/foo -> /usr/local/lib/node_modules/@isaacs/foo/foo.js
/usr/local/lib/node_modules/@isaacs/foo -> /Users/isaacs/dev/js/x/scopebin
$ foo
foo
$ cat $(which foo)
#!/usr/bin/env node
console.log("foo")
$ ls -laF $(which foo)
lrwxr-xr-x 1 isaacs admin 38 Jun 22 15:55 /usr/local/bin/foo@ -> ../lib/node_modules/@isaacs/foo/foo.js
$ ls -laF /usr/local/lib/node_modules/@isaacs/foo
lrwxr-xr-x 1 isaacs admin 31 Jun 22 15:55 /usr/local/lib/node_modules/@isaacs/foo@ -> /Users/isaacs/dev/js/x/scopebin
当然,如果在package.json中只使用“bin”:“foo.js”
,那么将其转换为“bin”:{:“foo.js”}
的默认机制将不起作用,因为
中有一个//code>
$ npm link
/usr/local/bin/@isaacs/foo -> /usr/local/lib/node_modules/@isaacs/foo/foo.js
/usr/local/lib/node_modules/@isaacs/foo -> /Users/isaacs/dev/js/x/scopebin
由于/usr/local/bin/@isaacs
不在我的路径中,它将无法按预期工作
$ foo
bash: foo: command not found
这是使用最新和最伟大的npm。YMMV,如果您使用的是旧的
$ npm -v
2.12.0
在作用域包目录中执行时,您能否显示npm-link
的输出?@eush77npm-link
似乎解决了这个问题,并且可以找到并运行二进制文件(请参阅更新问题中的输出)。尽管它需要从源文件夹内部运行。除非用户手动查找文件夹,否则通过npm private安装也会出现同样的问题。在GitHub上作为npm bug归档?我认为这确实是一个npm bug。说全局安装的可执行文件应该转到{prefix}/bin
,在这种情况下它们肯定不会。npm link
命令确实有效,但是,这是从npm private安装工具,所以npm install foo-g
。此npm install命令似乎没有链接二进制文件。如果未限定“foo”的作用域,npm install命令将正常工作。