自定义 NPM 包 - 自定义命令行命令
Custom NPM package - Custom command line command
我最近使用以下命令创建了一个名为 Project_1 的 NPM 包(我将其安装在另一个名为 Project_2 的 Node.js 项目中):
npm install --save ./path/to/Project_1
(有没有更好的方法在本地安装一个本地包?)
所以Project_2的packaje.json如下:
{
"name": "Project_2",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
},
"dependencies": {
"Project_1": "file:../Project_1",
}
}
在我创建的npm包(Project_1)中,JSON包如下:
{
"name": "Project_1",
"scripts": {
"custom-serve": "http-server ./website --port 8888 -o"
}
}
当我处于 Project_1 的根目录时,我可以从终端启动:
npm run custom-serve
这样我就可以执行自定义命令了。
我需要知道如何在Project_2中调用npm run custom-serve
(也是从命令行)在 Project_2 中安装 Project_1 包作为 npm 依赖项之后。
因此,在 Project_2 的根目录中,我希望能够 运行 npm run custom-serve
以便触发 Project_1 库中编写的命令。
我该怎么做?我应该如何设置 JSON 包?有这样做的最佳实践吗?我需要在 .js 中添加特殊脚本吗?
这是因为我注意到,在安装 npm 包时,它们总是提供可以从安装它们的项目的根目录启动的命令。
注意:命令custom-serve
只是一个例子。我想在 Project_1 中创建一些自定义命令,并且我希望能够在 Project_1 包的 npm 安装后在 Project_2 中调用它们。
我已经尝试在 Project_2 中创建一个脚本,如下所示:
"scripts": {
"custom-command": "cd ./node_modules/Project_1 && npm run custom-serve",
}
但是不行。
如果您的 Project_1 中有一个索引文件,并且您将 Project1 作为 Project2 的依赖项,您只需调用该文件,它将 运行 默认启动命令:
在Project_1package.json文件中:
{
"name": "Project_1",
"scripts": {
"custom-serve": "http-server ./website --port 8888 -o",
"start": "npm run custom-serve"
}
}
在Project_2package.json文件中:
{
"name": "Project_2",
"scripts": {
"custom-command": "node Project_1"
}
}
首先,要回答您的问题,如果有更好的方法来安装本地依赖项,可以通过 npm link.
假设项目 1 的包文件中的名称是 project-1
,您可以在项目 2 中 link 如下(显然使用与您的设置相对应的路径):
cd ~/projects/project-1
npm link
cd ~/projects/project-2
npm link project-1
其次,如果你想让你的包暴露一个可运行的命令,你应该配置这个in the bin section of its package.json。该路径应指向一个可执行文件,因此要重用 npm 脚本,您可以使用 execute
如下
custom-command.js
const {exec} = require('child_process');
exec('npm run custom-serve');
然后将bin部分添加到项目1的package.json中:
"bin": {
"custom-command": "./custom-command.js",
}
我最近使用以下命令创建了一个名为 Project_1 的 NPM 包(我将其安装在另一个名为 Project_2 的 Node.js 项目中):
npm install --save ./path/to/Project_1
(有没有更好的方法在本地安装一个本地包?)
所以Project_2的packaje.json如下:
{
"name": "Project_2",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
},
"dependencies": {
"Project_1": "file:../Project_1",
}
}
在我创建的npm包(Project_1)中,JSON包如下:
{
"name": "Project_1",
"scripts": {
"custom-serve": "http-server ./website --port 8888 -o"
}
}
当我处于 Project_1 的根目录时,我可以从终端启动:
npm run custom-serve
这样我就可以执行自定义命令了。
我需要知道如何在Project_2中调用npm run custom-serve
(也是从命令行)在 Project_2 中安装 Project_1 包作为 npm 依赖项之后。
因此,在 Project_2 的根目录中,我希望能够 运行 npm run custom-serve
以便触发 Project_1 库中编写的命令。
我该怎么做?我应该如何设置 JSON 包?有这样做的最佳实践吗?我需要在 .js 中添加特殊脚本吗? 这是因为我注意到,在安装 npm 包时,它们总是提供可以从安装它们的项目的根目录启动的命令。
注意:命令custom-serve
只是一个例子。我想在 Project_1 中创建一些自定义命令,并且我希望能够在 Project_1 包的 npm 安装后在 Project_2 中调用它们。
我已经尝试在 Project_2 中创建一个脚本,如下所示:
"scripts": {
"custom-command": "cd ./node_modules/Project_1 && npm run custom-serve",
}
但是不行。
如果您的 Project_1 中有一个索引文件,并且您将 Project1 作为 Project2 的依赖项,您只需调用该文件,它将 运行 默认启动命令:
在Project_1package.json文件中:
{
"name": "Project_1",
"scripts": {
"custom-serve": "http-server ./website --port 8888 -o",
"start": "npm run custom-serve"
}
}
在Project_2package.json文件中:
{
"name": "Project_2",
"scripts": {
"custom-command": "node Project_1"
}
}
首先,要回答您的问题,如果有更好的方法来安装本地依赖项,可以通过 npm link.
假设项目 1 的包文件中的名称是 project-1
,您可以在项目 2 中 link 如下(显然使用与您的设置相对应的路径):
cd ~/projects/project-1
npm link
cd ~/projects/project-2
npm link project-1
其次,如果你想让你的包暴露一个可运行的命令,你应该配置这个in the bin section of its package.json。该路径应指向一个可执行文件,因此要重用 npm 脚本,您可以使用 execute
如下
custom-command.js
const {exec} = require('child_process');
exec('npm run custom-serve');
然后将bin部分添加到项目1的package.json中:
"bin": {
"custom-command": "./custom-command.js",
}