Capacitor应用link自定义插件后运行报错No such module 'SomeModule'
问题排查与解决方案
你的操作存在2处可导致该问题的错误,对应修复方式如下:
核心问题原因
1. 依赖声明错误
插件本地构建正常是因为插件开发环境会安装devDependencies下的所有依赖,触发该问题有两种可能:
- 你把插件自身运行时需要用到的第三方库放在了
devDependencies字段下,当插件被应用引入时,npm只会自动安装插件dependencies字段下的依赖,dev依赖不会被同步安装到应用的node_modules中,就会触发依赖不存在的报错。 - 如果该依赖是要求宿主应用自行安装的公共依赖,你没有将它声明在插件的
peerDependencies字段中,也没有在应用侧安装对应版本的依赖。
2. 执行顺序错误
你在应用目录先执行npm link plugin-name再执行npm install,后者会校验依赖树并覆盖你刚创建的软链,要么将本地插件替换为npm源的同名版本,要么直接解除软链关联,导致本地修改的插件没有被正确引入。
修复步骤
- 调整插件的
package.json配置:- 若缺失的依赖是插件自身需要用的,将其从
devDependencies移动到dependencies字段下 - 若缺失的依赖是要求宿主安装的公共依赖,将其添加到插件的
peerDependencies字段下,同时在应用的dependencies中安装对应版本的该依赖
- 若缺失的依赖是插件自身需要用的,将其从
- 重新执行插件端构建关联操作:
# 插件目录下执行 npm run build npm link
- 调整顺序后执行应用端关联操作:
# 应用目录下执行 npm install npm link plugin-name npx cap sync
- 若仍报错,先删除应用目录下的
node_modules文件夹、package-lock.json(或对应包管理器的锁文件)后,再重新执行上述3步即可。
问题相关截图


内容的提问来源于stack exchange,提问作者JeanDArc
相关产品推荐
相关产品推荐

