有没有办法在运行 "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"
],
...
}
警告: 虽然 怎么可能 部分描述了需要对源代码进行哪些更改才能达到你想要的要求,我不是暗示,也不是建议你更改源代码。
我知道我以后总是可以回去编辑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/typeplatform-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"
],
...
}
警告: 虽然 怎么可能 部分描述了需要对源代码进行哪些更改才能达到你想要的要求,我不是暗示,也不是建议你更改源代码。