将MathJax集成到SystemJS构建中

时间:2016-12-06 06:38:26

标签: angular build systemjs mathjax

我使用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>

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

对于它的价值,与当代构建工具的兼容性是明年MathJax v3.0的可交付成果。

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