You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:03:13