自定义 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",
}