有没有办法在运行 "npm init"时在关键字中包含空格?

Is there any way to include spaces in keywords while running "npm init"?

我知道我以后总是可以回去编辑package.json,但我忍不住好奇:有什么办法可以运行 npm init然后输入表格 "keywords" 部分有空格的短语?例如,输入 "platform api" 会导致单词“"platform' and 'api"”的前导引号和尾随引号被转义。

简答:

,很遗憾,您无法通过 npm init command that includes spaces, such as platform api, and expect it to become a single element within the resultant keywords 数组为 关键字 输入短语]package.json 文件.

下面的示例显示了您想要的 package.json:

中的有效结果
{
  ...
  "keywords": [
    "platform api"
  ],
  ...
}

注意: 虽然上面显示的关键字示例在 package.json 中完全有效,但无法通过使用 [=16] 从命令行输入来实现=] 命令。我会考虑:

  • 如你所说,追溯输入package.json
  • 或者,在使用 npm init 命令时,只需使用连字符代替,即 enter/type platform-api 通过命令行。 - 注意:这将导致 package.json 中的 platform-api 而不是 platform api

长答案:

为什么不可以?

由于使用了 init-package-json package that the npm-cli 工具中的基础源代码,因此使用 npm init 命令无法通过命令行实现您想要的结果。

让我们看一下名为 default-input.js 的文件中从 line #210 开始的代码的相关部分。如下所示:

摘自默认-input.js

if (!package.keywords) {
  exports.keywords = yes ? '' : prompt('keywords', function (s) {
    if (!s) return undefined
    if (Array.isArray(s)) s = s.join(' ')
    if (typeof s !== 'string') return s
    return s.split(/[\s,]+/)             // <---- line #215
  })
}

line #215上,读到的部分;

return s.split(/[\s,]+/)

字符串(即您通过命令行输入的关键字)使用 split() method. Notice the regular expression, i.e. [\s,]+ 拆分为一个数组,用作 分隔符 用于 split() 方法。这实质上是在有 space 个字符 and/or 逗号的地方拆分字符串。尤其是这部分让你的要求无法实现。

怎么可能?

如果 line #215 更改为:

return s.split(/,\s/)

其中逗号后跟 space 用作 split() 方法的 分隔符 。然后假设通过 npm init 命令输入 关键字

platform api, foobar, quux

这将在您的结果中产生以下 keywords 条目 package.json:

{
  ...
  "keywords": [
    "platform api",
    "foobar",
    "quux"
  ],
  ...
}

警告: 虽然 怎么可能 部分描述了需要对源代码进行哪些更改才能达到你想要的要求,我不是暗示,也不是建议你更改源代码。