添加package.json的browser字段后,browserify提示找不到模块
首先得说,你的核心理解没跑偏——package.json里的browser字段确实是给browserify这类浏览器端打包工具用的,用来指定浏览器环境下的入口文件,或者替换Node.js专属模块为浏览器兼容版本。报错找不到browser.js,大概率是配置细节或者命令搭配出了问题,不是概念错了。
下面给你拆解几个最可能的原因:
配置格式搞反了输出和源文件
很多人会犯这个错:把browser字段直接写成了最终要生成的browser.js,比如"browser": "browser.js"。但实际上,browser字段指向的应该是你的源代码入口,而不是打包后的输出文件。毕竟browserify是要读取你的源文件来构建,你让它找一个还没生成的文件,它肯定会报错。
正确的配置应该是指向你的源文件,比如你的入口是src/index.js,那应该写"browser": "./src/index.js"。命令参数和package.json配置的冲突
之前你可能是用类似browserify src/index.js -o browser.js的命令手动指定入口和输出。当你加了browser字段后,如果还在命令里指定入口,或者没调整命令逻辑,可能会出现混淆?其实更简单的做法是,配置好browser字段后,直接运行browserify -o browser.js,这时候browserify会自动读取package.json里的browser字段作为入口,帮你生成目标文件。路径相对位置出错
要注意browser字段里的路径是相对于package.json所在目录的。比如你的源文件在src/main.js,但你写成了"browser": "main.js",browserify就会在项目根目录找这个文件,自然找不到,这时候就会报模块缺失的错误。
总结一下:你对browser字段的核心作用理解是对的,只是在配置时搞混了源文件和输出文件的关系,或者路径没写对。调整一下配置指向你的源入口,再配合正确的browserify命令,问题应该就能解决。
内容的提问来源于stack exchange,提问作者danday74

