0

我知道我总是可以稍后返回并编辑 package.json,但我不禁好奇:有没有办法npm init在表单的“关键字”部分运行并输入带有空格的短语?例如,输入 "platform api" 会导致单词 '"platform' 和 'api"' 的前导和尾随引号被转义。

4

1 回答 1

2

简短的回答:

,很遗憾,您不能通过包含空格的命令为关键字npm init输入短语,例如,并期望它成为package.json文件的结果数组中的platform api单个元素。keywords

下面的示例在package.json中显示了您想要的有效结果:

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

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

  • 就像你说的那样,回顾性地将其输入package.json.
  • 或者,只使用连字符,即在使用命令platform-api时通过npm init命令行输入/键入。-注意:这将导致platform-apipackage.json 而不是platform api

长答案:

为什么不可能?

由于npm-cli工具使用的init-package-json包中npm init的底层源代码,无法通过使用命令的命令行实现您想要的结果。

让我们看一下从文件名为default-input.js. 如下图所示:

摘自 default-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
  })
}

第 #215 行,读取的部分;

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

使用该方法将字符串(即您通过命令行输入的关键字)拆分为一个数组split()。请注意,正则表达式 ie[\s,]+用作方法的分隔split()。这实质上是在有空格字符和/或逗号的地方分割字符串。尤其是这部分使您的要求无法实现。

怎么可能?

如果第 215 行更改为:

return s.split(/,\s/)

其中逗号后跟空格用作该方法的分隔符split()。然后让我们通过您输入的关键字npm init的命令说:

platform api, foobar, quux

这将导致您的结果package.json中出现以下keywords条目:

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

注意:虽然如何可能部分描述了对源代码进行哪些更改以实现您的期望要求,但我并不是暗示或建议您更改源代码。

于 2020-06-11T12:16:59.120 回答