4

我正在尝试将 EmberJS 应用程序嵌入到广泛使用 RequireJS 库的大型门户应用程序中。我正在使用 ember-cli 来构建项目。构建的应用程序包含两个文件,dist/assets/vendor.jsdist/assets/myapp.js. EmberJS 应用程序在嵌入后工作,但门户应用程序的 javascript 中断。

经过一番研究,我发现问题在于它vendor.js定义了自己的变量require, requirejsrequireModule并且define与全局命名空间中的网站变量冲突。然后该myapp.js文件包含define加载应用程序模块的语句。

有没有办法重命名这些或将它们放入一些不同的命名空间?

我想出的唯一解决方案是手动重命名两个.js文件中的变量。这似乎可行,但它相当麻烦,如果它可以自动化,那就太好了。我还发现了有关使用 RequireJS 优化器的信息,但我无法让它与vendor.js文件一起使用。

你能帮助我吗?谢谢!

4

2 回答 2

4

我遇到了同样的问题,经过大量搜索,我相信我设法通过将ember-derequire插件添加到我的项目中来解决它:

ember install ember-derequire

这会将应用程序中的所有“require”和“define”语句更改为“eriuqer”和“enifed”。如果您不喜欢 eriuqer 和 enifed,您可以使用选项覆盖它映射到的内容(注意您必须使用相同长度的内容)。

如果这没有帮助,我发现的另一个有希望的事情是loader.js有一个 noConflict() 函数,但我不知道在哪里放置 loader.noConflict() 调用,或者让构建生成使用备用名称进行代码,但如果第一个选项不适用于您的情况,它可能会对您有所帮助。

于 2016-08-22T20:38:08.420 回答
0

正如@Bjornicushttps://stackoverflow.com/a/39088322/5056421)所写, built-inloader.jsnoConflict()功能似乎可以正常工作。我把它放在主 JS 文件(app.js)中:

window.loader.noConflict({
  define: "emberDefine"
});

并且define没有被覆盖(我将 ember 应用程序导入另一个使用 SystemJS 的应用程序)。但是我只做了很少的测试,所以我不知道这是否不会在以后破坏某些东西。

于 2020-02-07T15:14:50.020 回答