解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module ''

2,393 阅读2分钟

简单粗暴的解决办法

直接去看module''后面跟着的模块名,使用npm install [模块名] -g全局下载。问题的本质就是npm记录了你这个模块的启动命令但是找不到相对应的模块

起因

想要自己写一个npm模块,参考前端如何从0构建自己的脚手架 完成了基本部分的编写

模块的运行命令是yd。在项目中用了npm link 后连接到全局,这样直接使用yd就可以把这个模块跑起来,在package.json文件中是这样的:

...,
"bin": { "yd": "./bin/cli.js" // 手动添加入口文件为 cli.js yd为程序的快速启动命令 },
...

但是自己写模块总不能用别人的简称吧,于是想改成自己的xx,这时候惊奇的事情发生了,不论用yd还是xx都可以把项目跑起来,但是我的package.json文件里面已经改成了xx

在使用npm unlink [模块名]npm uninstall [模块名] -g后,发现xx已经被解除了关联,但是运行yd就会报这个错误:

internal/modules/cjs/loader.js:582
    throw err;
    ^

Error: Cannot find module 'C:\Users\User\Desktop\NodeJsProject\app.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
    at Function.Module._load (internal/modules/cjs/loader.js:506:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
    at startup (internal/bootstrap/node.js:285:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)

在网上找了资料后,找到了最开始的解决办法。但是很显然我一开始就知道这个问题(毕竟自己写的包自己解除的关联),令我疑惑的就是为什么是yd或报这个错误?

结果

node安装后修改缓存和模块存放路径的命令

npm config set prefix "文件路径"

npm config set cache "文件路径"

查看这两个的路径

npm config get prefix

npm config get cache

所以最后我在prefix配置文件夹下发现了yd|yd.cmd|yd.ps1,看来是当时npm自动给我记住了这个命令,大概是npm模块查找机制这部分的知识点。

值得一提的是,模块在第一次引入后就会缓存在内存中,再次引入时,会直接读取在内存中的模块缓存。所以即使多次require同一个文件也不会多次执行