Issue 1:
Current Behavior:

publishing throws an error

Expected Behavior:

publish without error

Steps To Reproduce:

nvm use 15.12.0;

npm publish

0 verbose cli [
0 verbose cli '/home/jonathan/.nvm/versions/node/v15.12.0/bin/node',
0 verbose cli '/home/jonathan/.nvm/versions/node/v15.12.0/bin/npm',
0 verbose cli 'publish',
0 verbose cli '--tag',
0 verbose cli 'alpha'
0 verbose cli ]
1 info using npm@7.6.3
2 info using node@v15.12.0
3 timing config:load:defaults Completed in 1ms
4 timing config:load:file:/home/jonathan/.nvm/versions/node/v15.12.0/lib/node_modules/npm/npmrc Completed in 1ms
5 timing config:load:builtin Completed in 1ms
6 timing config:load:cli Completed in 1ms
7 timing config:load:env Completed in 1ms
8 timing config:load:file:/home/jonathan/Workspace/nti/app/webapp/.npmrc Completed in 2ms
9 timing config:load:project Completed in 2ms
10 timing config:load:file:/home/jonathan/.npmrc Completed in 1ms
11 timing config:load:user Completed in 1ms
12 timing config:load:file:/home/jonathan/.nvm/versions/node/v15.12.0/etc/npmrc Completed in 0ms
13 timing config:load:global Completed in 0ms
14 timing config:load:cafile Completed in 0ms
15 timing config:load:validate Completed in 0ms
16 timing config:load:setUserAgent Completed in 0ms
17 timing config:load:setEnvs Completed in 1ms
18 timing config:load Completed in 8ms
19 verbose npm-session 58bbfc3072044dcf
20 timing npm:load Completed in 12ms
21 verbose publish [ '.' ]
22 timing command:publish Completed in 19ms
23 verbose stack TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
23 verbose stack at new NodeError (node:internal/errors:329:5)
23 verbose stack at validateString (node:internal/validators:129:11)
23 verbose stack at join (node:path:1081:7)
23 verbose stack at flatten (/home/jonathan/.nvm/versions/node/v15.12.0/lib/node_modules/npm/lib/utils/flat-options.js:50:10)
23 verbose stack at Publish.publishConfigToOpts (/home/jonathan/.nvm/versions/node/v15.12.0/lib/node_modules/npm/lib/publish.js:140:12)
23 verbose stack at Publish.publish (/home/jonathan/.nvm/versions/node/v15.12.0/lib/node_modules/npm/lib/publish.js:58:32)
24 verbose cwd /home/jonathan/Workspace/nti/app/webapp
25 verbose Linux 5.10.23-200.fc33.x86_64
26 verbose argv "/home/jonathan/.nvm/versions/node/v15.12.0/bin/node" "/home/jonathan/.nvm/versions/node/v15.12.0/bin/npm" "publish" "--tag" "alpha"
27 verbose node v15.12.0
28 verbose npm v7.6.3
29 error code ERR_INVALID_ARG_TYPE
30 error The "path" argument must be of type string. Received undefined
31 verbose exit 1

Environment:

OS: Fedora 33

Node: 15.12.0

npm: 7.6.3

Issue 2:
Current Behavior:

When running npm publish the following error appears:

npm ERR! code ERR_INVALID_ARG_TYPE
npm ERR! The "path" argument must be of type string. Received undefined

npm ERR! A complete log of this run can be found in:
npm ERR! /home/xx/.npm/_logs/2021-03-06T09_10_43_193Z-debug.log

The debug trace shows:

23 verbose stack TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
23 verbose stack at validateString (internal/validators.js:124:11)
23 verbose stack at join (path.js:1039:7)
23 verbose stack at flatten (/home/xx/.nvm/versions/node/v14.16.0/lib/node_modules/npm/lib/utils/flat-options.js:50:10)
23 verbose stack at Publish.publishConfigToOpts (/home/xx/.nvm/versions/node/v14.16.0/lib/node_modules/npm/lib/publish.js:140:12)
23 verbose stack at Publish.publish (/home/xx/.nvm/versions/node/v14.16.0/lib/node_modules/npm/lib/publish.js:58:32)

Expected Behavior:

npm publish to continue working as it did in version 6

Steps To Reproduce:

In this environment...

Ubuntu 20.04

Node 14.16.0

npm 7.6.1

With this config...

The package is configured to be published to github as per: github instrutions

package.json includes:

"publishConfig": {
"registry": "https://npm.pkg.github.com"
},

Run npm publish

See error:

npm ERR! code ERR_INVALID_ARG_TYPE
npm ERR! The "path" argument must be of type string. Received undefined`

Environment:

Ubuntu 20.04

Node 14.16.0

npm 7.6.1

Possible cause

The issue seems to be related to changes made to the flatten() method in utils/flat-options.js

This is being called with the publishConfig which only contains a registry property.

However flatten (line 50), tries to use join() to create a path from the non-existent'cache property, hence the error (I believe).

Looking at the changes, it seems that v6 used to read the npm config for the cache value.

Workaround

My temporary workaround for this is to add a cache property to the publishConfig section, using the default cache value:

"publishConfig": {
"cache": "~/.npm",
"registry": "https://npm.pkg.github.com"
},

As others have noted, this workaround has the side-effect of creating a ~/.npm directory in the root of the project. My solution to this was then simply to add ~/.npm to .gitgnore

I guess that you could name this cache directory whatever you like. I used the default value simply to make publish work again. Note that my suggestion is purely a workaround and doesn't resolve the actual issue. Although I could see in the v7 code where the change has been made that is causing this issue, unfortunately I was unable to understand why that change was made.