【问题标题】:Embedded ember-cli project conflicts with RequireJS嵌入式 ember-cli 项目与 RequireJS 冲突
【发布时间】:2015-01-18 11:09:07
【问题描述】:

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

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

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

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

你能帮帮我吗? 谢谢!

【问题讨论】:

  • 你好@janhink,我知道你已经很久了,我只是偶然发现了你的问题,想知道你的解决方案是什么?你重命名了哪些变量?因为我有同样的问题:) 提前谢谢你!

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


【解决方案1】:

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

ember install ember-derequire

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

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

【讨论】:

  • 感谢您的回答!已经很长时间了,我真的没有办法再测试它了,但如果有人这样做并且它有效,我会接受这个作为解决方案。
【解决方案2】:

正如@Bjornicus (https://stackoverflow.com/a/39088322/5056421) 所写,内置loader.js 的noConflict() 函数似乎工作正常。我把它放在主JS文件(app.js)中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2019-08-15
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多