【发布时间】:2020-06-11 21:24:22
【问题描述】:
我知道我以后总是可以返回并编辑 package.json,但我不禁好奇:有什么方法可以运行 npm init 并在“关键字”部分输入带有空格的短语的形式?例如,输入 "platform api" 会导致单词 '"platform' 和 'api"' 的前导和尾随引号被转义。
【问题讨论】:
我知道我以后总是可以返回并编辑 package.json,但我不禁好奇:有什么方法可以运行 npm init 并在“关键字”部分输入带有空格的短语的形式?例如,输入 "platform api" 会导致单词 '"platform' 和 'api"' 的前导和尾随引号被转义。
【问题讨论】:
否,很遗憾,您不能通过包含空格的 npm init 命令为 keyword 输入短语,例如 platform api,并期望它成为package.json 文件的结果 keywords 数组中的单个元素。
下面的示例在 package.json 中显示了您想要的有效结果:
{
...
"keywords": [
"platform api"
],
...
}
注意:虽然上面显示的关键字示例在package.json 中完全有效,但它不能通过使用npm init 命令从命令行输入来实现。我会考虑:
package.json。npm init 命令时通过命令行输入/键入platform-api。 - 注意:这将导致 package.json 中的 platform-api 而不是 platform api
由于npm-cli 工具使用了init-package-json 包中的底层源代码,因此无法通过使用npm init 命令的命令行获得所需的结果。
让我们看一下名为default-input.js 的文件中从line #210 开始的相关代码部分。如下图所示:
摘自 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 }) }
在line #215上,读取的部分;
return s.split(/[\s,]+/)
使用split() 方法将字符串(即您通过命令行输入的关键字)拆分为一个数组。请注意正则表达式,即[\s,]+,用作split() 方法的分隔符。这实质上是在有空格字符和/或逗号的地方分割字符串。尤其是这部分使您的要求无法实现。
如果line #215 更改为:
return s.split(/,\s/)
其中一个逗号后跟一个空格用作split() 方法的分隔符。然后让我们通过npm init 命令对您输入的关键字 说:
platform api, foobar, quux
这将导致您的结果 package.json 中出现以下 keywords 条目:
{
...
"keywords": [
"platform api",
"foobar",
"quux"
],
...
}
警告:虽然怎么可能部分描述了对源代码进行哪些更改才能实现您的期望要求,但我并不是暗示,也不建议您更改源代码。
【讨论】: