嵌入式ember-cli项目与RequireJS冲突

时间:2014-11-20 14:34:45

标签: javascript ember.js requirejs ember-cli requirejs-optimizer

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

经过一些研究后我发现问题是vendor.js定义了自己的变量requirerequirejsrequireModuledefine全局命名空间中的网站变量。然后myapp.js文件包含加载应用程序模块的define语句。

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

我想出的唯一解决方案是手动重命名两个.js文件中的变量。这似乎有效,但它相当麻烦,如果它可以自动化它会很好。我也发现了使用RequireJS优化器,但我无法使用vendor.js文件。

你能帮帮我吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

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

ember install ember-derequire

这会将您应用中的所有'require'和'define'语句更改为'eriuqer'和'enifed'。你可以使用选项覆盖它映射到的内容(如果你不喜欢eriuqer和enifed,则需要注意使用相同长度的东西)。

如果没有帮助,我发现的另一个有希望的事情是loader.js有一个noConflict()函数,但我无法弄清楚在哪里放置loader.noConflict()调用,或者获取构建以使用备用名称生成代码,但如果第一个选项不适用于您的情况,它可能会帮助您。

答案 1 :(得分:0)

@@ Bjornicushttps://stackoverflow.com/a/39088322/5056421)写道,内置loader.js的{​​{1}}函数似乎正常工作。我将其放在主要的JS文件(app.js)中:

noConflict()

window.loader.noConflict({ define: "emberDefine" }); 未被覆盖(我将ember应用程序导入到另一个使用SystemJS的应用程序中)。但是我只做了很少的测试,所以我不知道这以后是否不会破坏某些东西。