Nodejs在Linux中npm出现npmlog找不到的解决方法

Nodejs在Linux中npm出现npmlog找不到的解决方法

今天在对nodejs项目进行服务器迁移的时,在新的linux服务器上输入npm -v 命令后报 “cannot find module ‘npmlog’….”的错误。找到的原因是拷贝过去的bin目录下的npm文件并没有链接到module目录下的npm-cli.js文件,所以导致在执行 npm -v 命令时,路径问题导致npmlog模块无法找到。

解决的方法有两个,一个是删除bin目录下的npm文件,并用如下命令链接到npm-cli.js。

ln -s ../lib/node_modules/npm/bin/npm-cli.js

经过试验发现,在服务器外解压缩nodejs官网下载的编译好的压缩包,再将解压的文件拷贝到服务器上时,bin下的npm是没有链接到npm-cli.js的。 第二种方式是将下载好的node-v0.10.33-linux-x64.tar.gz压缩包先放置在服务器上,再进行解压缩,此时npm是已经链接到npm-cli.js的。 看到命令行中显示如下则为成功。

[root[@linux](/user/linux) bin]# ll
npm -> ../lib/node_modules/npm/bin/npm-cli.js
[root[@linux](/user/linux) bin]# ./npm -v
v1.4.26

这两种拷贝方式导致不同的情况的原因不详,如有哪位大神知道其中奥秘,请指教。


2 回复

Nodejs在Linux中npm出现npmlog找不到的解决方法

今天在对Nodejs项目进行服务器迁移的过程中,在新的Linux服务器上输入npm -v命令后报出了“cannot find module ‘npmlog’…”的错误。经过排查,原因是拷贝过去的bin目录下的npm文件并没有正确链接到module目录下的npm-cli.js文件,这导致在执行npm -v命令时路径问题使得npmlog模块无法被找到。

解决方法

方法一:手动创建符号链接

步骤如下

  1. 首先,删除现有的npm文件:

    rm /path/to/nodejs/bin/npm
    
  2. 创建一个指向npm-cli.js的符号链接:

    ln -s ../lib/node_modules/npm/bin/npm-cli.js /path/to/nodejs/bin/npm
    

示例

假设你的Nodejs安装目录位于/usr/local/nodejs,那么你需要执行以下命令:

rm /usr/local/nodejs/bin/npm
ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/nodejs/bin/npm

验证

验证是否成功创建了符号链接:

ll /usr/local/nodejs/bin/npm

如果输出类似以下内容,则表示链接已成功创建:

lrwxrwxrwx 1 root root 38 Mar 15 10:25 /usr/local/nodejs/bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js

再次运行npm -v命令,应该不会再报错:

/usr/local/nodejs/bin/npm -v
方法二:直接在服务器上解压缩Nodejs压缩包

步骤如下

  1. 将Nodejs的压缩包(例如node-v0.10.33-linux-x64.tar.gz)上传到服务器上的某个目录。
  2. 在该目录下解压缩这个压缩包:
    tar -xzf node-v0.10.33-linux-x64.tar.gz
    
  3. 解压缩后的目录结构会自动创建符号链接,因此你可以直接使用npm命令。

示例

假设你将压缩包上传到了/opt目录下,那么你需要执行以下命令:

tar -xzf /opt/node-v0.10.33-linux-x64.tar.gz -C /opt/

验证

验证是否成功解压并创建了符号链接:

ll /opt/node-v0.10.33-linux-x64/bin/npm

如果输出类似以下内容,则表示符号链接已成功创建:

lrwxrwxrwx 1 root root 38 Mar 15 10:25 /opt/node-v0.10.33-linux-x64/bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js

再次运行npm -v命令,应该不会再报错:

/opt/node-v0.10.33-linux-x64/bin/npm -v

总结

以上两种方法都可以解决npmlog找不到的问题。如果你已经拷贝了文件到服务器上但没有创建正确的符号链接,可以尝试方法一。如果你还没有拷贝文件到服务器上,建议直接在服务器上解压缩压缩包,这样可以避免手动创建符号链接的麻烦。


当在Linux中遇到npm -v命令报错"cannot find module 'npmlog'"时,这通常是因为npm脚本没有正确链接到npm-cli.js文件。

解决方法

方法一:手动创建符号链接

  1. 删除现有npm文件

    rm /path/to/your/nodejs/bin/npm
    
  2. 创建符号链接

    ln -s /path/to/your/nodejs/lib/node_modules/npm/bin/npm-cli.js /path/to/your/nodejs/bin/npm
    

方法二:直接在服务器上解压安装包

确保你在服务器上直接解压node-v0.10.33-linux-x64.tar.gz压缩包,这样生成的npm文件会自动链接到npm-cli.js文件。

tar -xzf node-v0.10.33-linux-x64.tar.gz -C /usr/local/

验证是否成功

验证是否成功创建了符号链接:

ls -l /path/to/your/nodejs/bin/npm

你应该能看到类似以下输出:

npm -> ../lib/node_modules/npm/bin/npm-cli.js

然后再次运行npm -v命令:

./npm -v

如果一切正常,你应该能看到当前npm版本号。

通过以上两种方法,你应该能够解决npm找不到npmlog模块的问题。

回到顶部