简单粗暴的解决办法
直接去看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同一个文件也不会多次执行