本地安装的cli npm项目,执行简单
Locally-installed cli NPM project that is easy to execute
我正在构建一个 cli 节点模块。我希望人们能够 npm install
它并立即通过 npm my-project --arg=foo
这样的命令使用它。它适用于本地项目 CLI 作为开发工具使用,而不是全局安装。
似乎标准是在package.json
中使用bin
,但我不明白一些事情:
- 什么时候应该使用
bin
,什么时候应该使用scripts
?
- 如何运行包含项目中的命令?
npm my-project
不做。
这是我现在在 package.json
中所做的事情:
{
"name": "my-project",
"bin": "./cli.js"
}
而且我可以 运行 在本地:
node cli.js --arg=foo
但是当我在其他地方 npm-install my-project
时,我不知道如何 运行 它放在 bin 中的脚本(npm run my-project
不起作用),或者如果我'我正确使用它。
先解释一下bin
和scripts
的区别:前者如果你想提供一个命令行工具就用,后者如果你想提供一个额外的命令就用至 npm
(但有一些注意事项,请参见下文)。
根据你的情况,我想你想使用bin
。但是,如果您的脚本名为 my-project
,用户将不会使用 npm my-project --arg=foo
,而是使用 my-project --arg=foo
。为此,您的 package.json
将包含如下内容:
"bin" : "./bin/my-project"
在安装过程中,这会将 ./bin/my-project
复制到 "bin" 目录(在类 Unix OS 上通常是 /usr/local/bin
)。在开发过程中,您可以将其称为 node bin/my-project
,甚至可以只是 ./bin/my-project
,前提是它具有正确的权限并且 "shebang".
编辑:所以我忘记了 npm
将使用包名,而不是 ./bin
中的文件名作为可执行文件名(如果 bin
是一个字符串)。如果您的包名为 my-project
,并且您安装了该包(您需要在 npm 安装可执行文件之前使用 -g
标志),它将创建一个名为 my-project
的可执行文件,无论bin
属性 指向的位置。
换句话说:
package.json:
"name" : "my-project"
"bin" : "./cli.js"
npm install -g:
copies ./cli.js to /usr/local/bin/my-project and sets executable permissions
编辑结束
FWIW,将 CLI 工具存储在 ./bin
中是惯例,但不是强制性的。
scripts
指令可用于更多内部用途。例如,您可以将它用于 运行 测试套件、linters 或 pre/post 安装脚本。
最后,有各种模块可用于帮助命令行解析。我喜欢 docopt
, but other often-used modules are commander
or nomnom
. You already mentioned yargs
.
我正在构建一个 cli 节点模块。我希望人们能够 npm install
它并立即通过 npm my-project --arg=foo
这样的命令使用它。它适用于本地项目 CLI 作为开发工具使用,而不是全局安装。
似乎标准是在package.json
中使用bin
,但我不明白一些事情:
- 什么时候应该使用
bin
,什么时候应该使用scripts
? - 如何运行包含项目中的命令?
npm my-project
不做。
这是我现在在 package.json
中所做的事情:
{
"name": "my-project",
"bin": "./cli.js"
}
而且我可以 运行 在本地:
node cli.js --arg=foo
但是当我在其他地方 npm-install my-project
时,我不知道如何 运行 它放在 bin 中的脚本(npm run my-project
不起作用),或者如果我'我正确使用它。
先解释一下bin
和scripts
的区别:前者如果你想提供一个命令行工具就用,后者如果你想提供一个额外的命令就用至 npm
(但有一些注意事项,请参见下文)。
根据你的情况,我想你想使用bin
。但是,如果您的脚本名为 my-project
,用户将不会使用 npm my-project --arg=foo
,而是使用 my-project --arg=foo
。为此,您的 package.json
将包含如下内容:
"bin" : "./bin/my-project"
在安装过程中,这会将 ./bin/my-project
复制到 "bin" 目录(在类 Unix OS 上通常是 /usr/local/bin
)。在开发过程中,您可以将其称为 node bin/my-project
,甚至可以只是 ./bin/my-project
,前提是它具有正确的权限并且 "shebang".
编辑:所以我忘记了 npm
将使用包名,而不是 ./bin
中的文件名作为可执行文件名(如果 bin
是一个字符串)。如果您的包名为 my-project
,并且您安装了该包(您需要在 npm 安装可执行文件之前使用 -g
标志),它将创建一个名为 my-project
的可执行文件,无论bin
属性 指向的位置。
换句话说:
package.json:
"name" : "my-project"
"bin" : "./cli.js"
npm install -g:
copies ./cli.js to /usr/local/bin/my-project and sets executable permissions
编辑结束
FWIW,将 CLI 工具存储在 ./bin
中是惯例,但不是强制性的。
scripts
指令可用于更多内部用途。例如,您可以将它用于 运行 测试套件、linters 或 pre/post 安装脚本。
最后,有各种模块可用于帮助命令行解析。我喜欢 docopt
, but other often-used modules are commander
or nomnom
. You already mentioned yargs
.