将 MathJax 集成到 SystemJS 构建中

Integrate MathJax into SystemJS build

我使用 SystemJS 构建了一个 Angular 2 应用程序,我想开始在组件中使用 MathJax。我安装了:

npm install --save-dev mathjax
npm install --save @types/mathjax

MathJax 现已安装在 /node_modules/mathjax 中。当我的组件执行 import "mathjax" 时,文件 /node_modules/mathjax/MathJax.js 被加载。到目前为止一切顺利。

问题是此文件然后尝试使用相对于项目根目录而不是 MathJax 安装目录的路径加载其他文件。

例如,MathJax.js 尝试加载

/extensions/MathMenu.js  404 Not found
/extensions/MathZoom.js  404 Not found 

正确的路径是

/node_modules/mathjax/extensions/MathMenu.js
/node_modules/mathjax/extensions/MathZoom.js

快速查看源文件可以看出 URL 是这样引用的:

[MathJax]/extensions/MathMenu.js

知道我应该去哪里解决这个问题吗?我知道我不应该更改 MathJax.js 文件本身,因为任何更改都会在更新后被覆盖。使用 htaccess 或其他服务器端重定向也没有意义。

我知道我可以使用 CDN 加载工作的 MathJax 包:

<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=AM_SVG"></script>

但是我正在尝试学习如何将库集成到我的构建设置中。

简单地说,你不能像这样(此时)集成MathJax。

MathJax 包含一个自定义动态模块加载器,旨在一直工作到 IE6;毫不奇怪,它不适用于现代构建工具。

但很可能您也不希望完整集成 MathJax,因为它有几十兆字节(压缩)。现在,在实践中,您不需要所有组件,通常开发人员需要 1 个输入 + 1 个输出 + 1 组字体,大约 ~500-600KB(压缩)。

如果这是一个可行的有效负载,那么您可以考虑构建一个您应该能够集成的自定义单文件构建(例如 this one)。

就其价值而言,与现代构建工具的兼容性是明年 MathJax v3.0 的可交付成果。

完全披露:我是 MathJax 团队的一员。