Git Product home page Git Product logo

Comments (16)

wraithgar avatar wraithgar commented on June 14, 2024 2

It looks like your operating system put an invalid name in your node_modules folder. npm can't support things like this, it has to assume everything in there is something it put there. It has to error to let you know that you are now going to get unexpected results.

npm update -g does work. Because there is no global manifest it will always update to the latest version.

The solution here is to remove those files that osx put there, and configure it to stop doing that.

from cli.

ljharb avatar ljharb commented on June 14, 2024

Why is prefix set?

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

Why is prefix set?

I just want to custom it.

from cli.

ljharb avatar ljharb commented on June 14, 2024

Why? npm only comes with node, so it should only be located in the location that node ships it in.

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

Why? npm only comes with node, so it should only be located in the location that node ships it in.

I separated them.
I manually installed node to /opt/node/node, and set npm prefix to /opt/node/npm.

This has nothing to do with why I set the prefix, so far everything works fine with my configuration instead of this issue.
It seems that npm did not use the correct filter results when scanning the global lib directory, which caused this problem.

And here is a related issue in old repo.
npm/npm#20493

from cli.

ljharb avatar ljharb commented on June 14, 2024

prefix changes npm root -g, so it very well might be related. Have you tried a standard unmodified install to see if it's your modifications causing the problem?

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

prefix changes npm root -g, so it very well might be related. Have you tried a standard unmodified install to see if it's your modifications causing the problem?

Would you please try following steps to repro.

touch "$(npm config get prefix)/lib/node_modules/.DS_Store"
npm update -g

from cli.

ljharb avatar ljharb commented on June 14, 2024

I definitely get the same error, but npm update -g isn't a command that should work anyways, since there's no global package.json to update. Global packages need to be updated manually, one at a time.

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

npm update -g isn't a command that should work anyways.

image

The help message says it is ok.
<pkg> is optional.

from cli.

ljharb avatar ljharb commented on June 14, 2024

Seems like two legit issues: a documentation error, as well as "it should be failing with a clearer message".

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

I bet npm update -g works fine, I often do it. This can easily update all global libraries.
The only problem is that .DS_Store is not filtered out correctly.
In addition to .DS_Store, there may be some other files that need to be filtered.
But at least all regular file type should be excluded from the results and only the folder type should be kept as package name.

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

BTW, npm list -g works fine with .DS_Store.
image

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

const paths = await readdirScoped(nm).catch(() => [])

I tried change line 445 to following, and it works.

const paths = (await readdirScoped(nm).catch(() => []))
        .filter(p => p !== '.DS_Store')

Maybe we should fix it in readdir-scoped.js

const { readdir } = require('fs/promises')
const { join } = require('path')
const readdirScoped = async (dir) => {
const results = []
for (const item of await readdir(dir)) {
if (item.startsWith('@')) {
for (const scopedItem of await readdir(join(dir, item))) {
results.push(join(item, scopedItem))
}
} else {
results.push(item)
}
}
return results
}
module.exports = readdirScoped

from cli.

ljharb avatar ljharb commented on June 14, 2024

Possibly better logic would be, to filter out anything that can’t be a valid package name?

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

Possibly better logic would be, to filter out anything that can’t be a valid package name?

I agree, Maybe we should refer to npm list -g, since it works fine.

from cli.

xiaozhuai avatar xiaozhuai commented on June 14, 2024

It looks like your operating system put an invalid name in your node_modules folder.

As we all know, macOS may place a .DS_Store file in any directory.

It's unimaginable that npm doesn't handle it.

it has to assume everything in there is something it put there

Too idealistic.

The solution here is to remove those files that osx put there, and configure it to stop doing that.

This is not a solution.

I'm starting to understand why npm is the default package manager distributed with node, but people still invent alternatives.

I will move to yarn or pnpm, whatever.

from cli.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.