如何发布控制CLI关键字的NPM包

时间:2018-02-12 02:51:53

标签: node.js npm command-line

我不确定甚至搜索这个问题的正确词汇是什么,但我可以提到一些实现我试图拿起的模式的包:

  1. shx
  2. cross-env
  3. npm-run
  4. 安装任何这些软件包后,都可以通过CLI使用它们。例如,我将cross-env作为新项目的依赖项安装后,我可以在package.json中创建一个npm脚本,如"start": "cross-env NODE_ENV=production webpack"

    我检查了这些项目的package.json个文件,他们都使用了bin字段,但是如果我初始化一个本地项目(npm init)并添加一个bin字段,那么它就没有#39} ;即使在运行npm install之后,也可以在命令行中识别它。

    那么我怎样才能获得相同的功能呢?如果问题清楚或我是否应该添加其他信息,请告诉我。

    我的package.json位于以下位置:

    {
      "name": "sloth-cli",
      "version": "1.0.0",
      "description": "a dead simple Chron cli tool for Node",
      "bin": {
        "sloth": "node ."
      },
      "main": "index.js",
      "scripts": {
        "start": "node ."
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/Vandivier/sloth.git"
      },
      "keywords": [
        "chron"
      ],
      "author": "John Vandivier",
      "license": "MIT",
      "bugs": {
        "url": "https://github.com/Vandivier/sloth/issues"
      },
      "homepage": "https://github.com/Vandivier/sloth#readme"
    }
    

1 个答案:

答案 0 :(得分:1)

我最终发现了答案并让sloth-cli工作了。 bin中的package.json确实是关键,但在定义bin之后,我们必须在本地运行npm link

此外,bin的内容不能包含典型的npm脚本语法。它必须引用一个设置为在CLI上下文中执行的文件。这可以像在{j}文件的顶部添加#! /usr/bin/env node一样简单。

将包发布到npm后,将其作为依赖项安装的人不需要运行npm link。 Npm处理那部分。以下是package.json的当前工作sloth-cli

{
  "name": "sloth-cli",
  "version": "1.0.2",
  "description": "a dead simple Chron cli tool for Node",
  "bin": {
    "sloth": "./index.js"
  },
  "main": "index.js",
  "scripts": {
    "immediately": "sloth .1 \"npm run say-hello\" true true",
    "start": "sloth .1 \"npm run say-hello\"",
    "say-hello": "node hello.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Vandivier/sloth.git"
  },
  "keywords": [
    "chron"
  ],
  "author": "John Vandivier",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Vandivier/sloth/issues"
  },
  "homepage": "https://github.com/Vandivier/sloth#readme",
  "dependencies": {
    "shelljs": "^0.8.1"
  }
}