I know I can always just go back and edit the package.json later, but I can't help but be curious: Is there any way to run npm init
and enter a phrase with spaces in the "keywords" part of the form? For example, entering "platform api" results in the words '"platform' and 'api"' with the leading and trailing quote escaped.

- 691
- 1
- 7
- 27
1 Answers
Short Answer:
No, unfortunately you cannot enter a phrase for a keyword via the npm init
command that includes spaces, such as platform api
, and expect it to become a single element within the resultant keywords
array of the package.json file.
The example below shows your desired valid result in package.json:
{
...
"keywords": [
"platform api"
],
...
}
Note: Whilst the keyword example shown above is perfectly valid in package.json
, it just cannot be achieved via input from the command-line using the npm init
command. I would consider either:
- Like you say, retrospectively entering it into
package.json
. - Or, just use a hyphen instead, i.e. enter/type
platform-api
via the command-line when usingnpm init
command. - Note: that would result inplatform-api
in package.json and notplatform api
Long Answer:
Why is it not possible?
Your desired result cannot be achieved via the command-line using the npm init
command because of the underlying source code in the init-package-json package that the npm-cli tool utilizes.
Let's look at the pertinent part of code starting at line #210 in the file named default-input.js
. Here it is shown below:
Excerpt from 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 }) }
On line #215, the part that reads;
return s.split(/[\s,]+/)
the string, (i.e. the keyword(s) that you enter via the command-line), are split into an Array using the split()
method. Notice the regular expression, i.e. [\s,]+
, is used as the separator for the split()
method. This essentially splits the string wherever there is a space character(s) and/or comma(s). It's particularly this part that makes your requirement not possible.
How could it be possible?
If line #215 was changed to:
return s.split(/,\s/)
whereby a comma followed by a space was used as the separator for the split()
method. Then let's say via the npm init
command for keywords you entered:
platform api, foobar, quux
that would result in the following keywords
entry in your resultant package.json:
{
...
"keywords": [
"platform api",
"foobar",
"quux"
],
...
}
Caution: Whilst the How could it be possible section describes what changes are necessary to the source code to achieve your desired requirement, I am not implying, nor suggesting, that you change the source code.

- 22,977
- 20
- 73
- 80