发布到npm的React/Redux组件无法从node_modules引用的问题
看起来你遇到的是npm模块导入时的常见问题,我帮你梳理几个最可能的原因和对应的解决办法:
严格匹配包名的大小写
npm的包名是区分大小写的!你导入用的是import * as test from 'Test';,但你发布的包实际名称是不是全小写的test?很多开发者习惯用小写命名npm包,而文件系统(尤其是Linux/macOS)会严格区分大小写,导致导入路径不匹配。先去你的npm包的package.json或者npm官网确认准确的包名,导入时完全保持一致。确认测试项目已正确安装该包
打开测试项目的node_modules文件夹,看看有没有对应名称的包目录。如果没有,说明你没在测试项目里执行安装命令,运行npm install [你的包名](比如npm install test),确保包被安装到项目中。检查发布包的
package.json的main字段
这是最容易踩的坑!你的npm包的package.json里必须正确配置main字段,它指定了包的入口文件路径。比如如果你的组件编译后放在dist/index.js,那main应该设置为"./dist/index.js";如果没设置main,npm默认会找根目录的index.js,如果你的代码不在根目录,就会导致CRA找不到模块。验证包是否成功发布到npm
有时候发布操作可能没成功,或者npm还在同步包信息。你可以在终端运行npm view [你的包名],如果能看到包的版本、main字段等信息,说明发布成功;如果查不到,重新执行npm publish(记得先通过npm login登录你的npm账号)。本地链接测试的特殊处理(如果用了
npm link)
如果你是通过npm link本地测试包而不是从npm安装,要确保链接的包名和导入名称一致,而且本地包已经完成编译(React组件需要编译成ES5才能被CRA识别)。另外,CRA可能会对链接的本地包有babel编译限制,必要时可以在测试项目的package.json里添加相关配置来处理。
内容的提问来源于stack exchange,提问作者Shivanya Harikrishnan

