本地安装自定义npm包报'require is not defined'错误,npm/git方式正常
解决本地安装fork版abcjs到Svelte(Vite)项目出现'require is not defined'的问题
以下是针对你遇到问题的具体排查和解决步骤:
先确认fork包是否完成构建
你只在子模块执行了npm install,但很多npm包需要执行构建命令生成浏览器兼容的ES模块代码。进入../dependencys/abcjs目录,执行npm run build,生成生产环境的编译文件后,再重新执行本地安装命令npm install ../dependencys/abcjs。检查fork包的package.json入口配置
对比官方abcjs的package.json,确保你的fork版本里的module字段指向了ES模块格式的输出文件(比如dist/abcjs.esm.js),main字段如果是CommonJS格式也没关系,但module字段是Vite优先识别的入口,要是这个字段不存在或者指向的文件没构建出来,Vite就会读取未编译的CommonJS源码,导致浏览器端出现require未定义的错误。给Vite添加强制预编译配置
如果上面两步没用,在项目的vite.config.js里添加以下配置,让Vite强制预编译本地安装的abcjs包:export default { optimizeDeps: { include: ['abcjs'], force: true } }这样Vite会把该包转化为浏览器可识别的模块格式,绕过CommonJS的
require问题。清理缓存重新安装
先执行npm uninstall abcjs,然后删除项目根目录的node_modules文件夹和package-lock.json文件,再重新执行npm install ../dependencys/abcjs,避免缓存残留导致的异常。
内容的提问来源于stack exchange,提问作者lokimidgard
相关产品推荐
相关产品推荐

