如何在Ember CLI构建应用时过滤文件(特指Monaco Editor的大量文件)并优化其依赖体积
如何在Ember中缩减Monaco Editor的依赖体积
我来帮你搞定这个Monaco体积优化的问题!你找对了方向——ember-cli-build.js就是Ember里对应Angular中angular.json的核心配置文件,而autoImport.alias就是实现依赖精简的关键配置项。
核心配置思路
Monaco Editor体积大的根源是默认会打包所有语言支持、主题和额外功能,我们可以通过别名替换,让Ember只加载你实际需要的核心模块,而非整个包。
具体配置示例
假设你只需要基础编辑器功能+JavaScript语言支持,修改你的ember-cli-build.js如下:
module.exports = function (defaults) { const app = new EmberApp(defaults, { autoImport: { alias: { // 替换默认的monaco-editor导入,指向核心编辑器入口 'monaco-editor': 'monaco-editor/esm/vs/editor/editor.main.js', // 同时关联对应的核心样式文件 'monaco-editor/editor.main.css': 'monaco-editor/esm/vs/editor/editor.main.css' }, }, }); // 如果你需要额外的语言/功能,比如JSON语法支持,可添加对应的别名 // 示例:引入JSON语言模块的worker // app.import('monaco-editor/esm/vs/language/json/json.worker.js', { // type: 'worker', // destDir: 'assets' // }); return app.toTree(); };
配置细节说明
- 路径选择:Monaco的ES模块版本存放在
esm/vs目录下,editor.main.js是仅包含核心编辑功能的最小入口,没有多余的语言包或主题。 - 样式关联:别忘了同步替换样式文件的别名,否则编辑器会缺少基础渲染样式。
- 扩展功能:如果需要其他语言(如TypeScript、HTML)或主题,不要直接导入整个包,而是单独引入对应的模块(比如
monaco-editor/esm/vs/language/typescript/ts.worker.js),并通过app.import配置worker文件的输出路径(如上面注释的示例)。
和Angular配置的对比
Angular通过angular.json的glob规则过滤打包文件,而Ember的autoImport.alias是直接替换代码中的导入路径,两者本质都是只引入必要模块,从而实现体积缩减的目标。
验证优化效果
配置完成后,运行ember build --prod构建生产环境包,查看打包后的体积变化,同时测试编辑器的核心功能(如编辑、语法高亮)是否正常工作。
内容的提问来源于stack exchange,提问作者dina
相关产品推荐
相关产品推荐

