如何为 `npm init` 设置默认测试命令?

How do I set the default test command for `npm init`?

我知道我能做到:

npm config set init.author.email me@mycompany.com
npm config set init.license UNLICENSED

设置用于创建新 package.jsonnpm init 的默认值。但是如何设置 test command 的默认值?我试过了

npm config set init.scripts.test "mocha"

但是没用。 npm docs 似乎没有帮助。

是否有所有初始化默认值的列表?

有一个所有默认配置的列表 npm config list -l

如您所见,没有 init.scripts 之类的东西。但是还有另一种方法可以做到。如果你先 npm install mocha 然后 npm init 你会得到一个 package.json 比如:

{
  "name": "asd",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {},
  "devDependencies": {
    "mocha": "^2.4.5"
  },
  "scripts": {
    "test": "mocha"
  },
  "author": "",
  "license": "UNLICENSED"
}

尽管您(目前)无法通过 npm 设置配置默认脚本,但您可以通过提供自己的 init-module 自定义整个 npm init 输出.默认存储在 ~/.npm-init.js - 无论您导出什么,都会成为 运行 npm init.

的结果

为了使它有用,您可能想要劫持位于 <your npm install directory>/node_modules/init.js 中的现有默认 npm init 模块。如果你只关心提供一个默认的测试脚本,最简单的选择是使用 init-module,它提供了一个配置参数 init-scripts-test.

我正在寻找一种以编程方式创建具有动态定义值的 package.json 的方法。我注意到在调用 npm init -y 之前创建了一个 package.json 文件按预期工作。

// Require: fs
const fs = require('fs')

// Variables
const values = {
    "scripts": {
        "test": "mocha"
    }
    // as well as any other values you want
}

// Create package.json
fs.writeFileSync('package.json', values)

运行 npm init -y 在 运行 之后,上述代码将生成一个 package.json 并定义了 scripts.test = "mocha"

如果您也在寻找从代码中实现 运行 npm init -y 的方法,我建议使用 shelljsshell.exec('npm init -y').

npm config set init ... 将为将要初始化的所有未来项目创建一个默认配置 - 如果您只想设置一些值一次 - 只需使用 shellscript 在 npm init 之前写入一些值像这样:

echo '{"version":"0.1.0","license":"UNLICENSED","private":true,"scripts":{"test":"npx jest"}}' > "./package.json" && npm init -y