Ember-classic-decorator在v2 addon组件中无法使用,普通组件正常,求解决方案
解决Ember v2 Addon中
ember-classic-decorator模块找不到的问题 以下是几个可行的解决方案,按优先级排序:
1. 正确声明依赖类型
v2 Addon遵循严格的依赖管理规则,不要将ember-classic-decorator放在devDependencies中,必须将其移至dependencies或peerDependencies:
- 如果你的Addon需要直接依赖该包运行,执行命令安装并添加到
dependencies:npm install ember-classic-decorator --save # 或 yarn add ember-classic-decorator - 如果希望由宿主应用提供该依赖(更符合Ember生态的最佳实践),将其声明为
peerDependencies,在package.json中添加:
同时提醒使用该Addon的用户安装此依赖。"peerDependencies": { "ember-classic-decorator": "^3.0.0" }
2. 配置Rollup构建(针对v2 Addon)
v2 Addon默认使用Rollup打包,需确保Rollup能正确解析ember-classic-decorator模块:
- 确保你的
rollup.config.js中引入了@embroider/addon-dev插件(v2 Addon标配):const { addonDev } = require('@embroider/addon-dev/rollup'); const { babel } = require('@rollup/plugin-babel'); module.exports = { input: 'src/index.js', output: addonDev.output(), plugins: [ addonDev(), babel({ babelHelpers: 'bundled', extensions: ['.js', '.gjs', '.gts'], }), ], // 将Ember类依赖标记为external,由宿主环境提供 external: ['ember-classic-decorator', '@ember/component', '@ember/service'], }; - 执行重新构建:
npm run build # 或 yarn build
3. 验证导入路径与源码结构
v2 Addon的源码默认放在src目录下,而非传统的app目录:
- 确保组件文件位于
src/components/下(而非app/components/) - 导入语句必须正确:
不要使用相对路径或错误的模块名。import { classic } from 'ember-classic-decorator';
4. 清除缓存并重启开发服务
Ember的缓存可能导致模块解析异常,执行以下操作:
- 删除
node_modules和dist目录:rm -rf node_modules dist - 重新安装依赖:
npm install # 或 yarn install - 重启开发服务:
npm run start # 或 yarn start
内容的提问来源于stack exchange,提问作者THENNARASU R
相关产品推荐
相关产品推荐

