liferay 7 - 不匹配的匿名定义()

Posted

技术标签:

【中文标题】liferay 7 - 不匹配的匿名定义()【英文标题】:liferay 7 - Mismatched anonymous define() 【发布时间】:2017-08-21 04:51:13 【问题描述】:

我正在尝试将 sockjs (v1.1.2) 包含在我的 liferay 7 portlet 中,但我收到了以下警告:

Mismatched anonymous define() module: function ()...

然后库没有加载。

我直接将 .js 文件包含在我的 liferay-portlet.xml 中,如下所示:

<header-portlet-javascript>/common/js/sockjs.js</header-portlet-javascript>

我不知道如何让它工作

【问题讨论】:

【参考方案1】:

您似乎遇到了LPS-68298 已解决的问题。如果您使用 Liferay 7.0 DXP SP2+ 或 Liferay 7.0 CE GA4+,您只需打开管理侧边栏并选择 控制面板 > 配置 > 系统设置 > Foundation > JavaScript 加载器 > 取消选中 Expose Global。如果您没有使用上述 Liferay 版本之一,则需要遵循this answer and disable the AMD loader before loading your script, then re-enable the AMD loader 的建议。或者,您可以通过手动编辑 JS 文件来解决此问题。更改 /common/js/sockjs.js 中的任何文本,例如:

typeof define == 'function'

收件人:

false && typeof define == 'function'

这将阻止 Liferay 的 AMD 加载程序加载文件。

【讨论】:

我通过禁用和重新启用 AMD 加载程序解决了问题。 使用 Liferay 7 CE GA4 上的控制面板提示解决。谢谢。 你无数次救了我的命,我老是忘记这个把戏!【参考方案2】:

stiemannkj1 是对的。

但是如果你不想接触js库的代码(可能是CDN)也不想改变配置你可以做以下事情(如果你担心多个站点和portlet可能会影响这种行为)。

<script>
    Liferay.Loader.define._amd = Liferay.Loader.define.amd;
    Liferay.Loader.define.amd = false;
</script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<script>
    Liferay.Loader.define.amd = Liferay.Loader.define._amd;
</script>

如果此代码不起作用,请尝试此代码。

<script>
    define._amd = define.amd;
    define.amd = false;
</script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<script>
    define.amd = define._amd;
</script>

【讨论】:

以上是关于liferay 7 - 不匹配的匿名定义()的主要内容,如果未能解决你的问题,请参考以下文章

Liferay 7 - Freemarker:解包操作与函数签名不匹配

在 Liferay 7 中创建自定义标签库

CSS 文件中的背景图像路径 - Liferay 6.2

Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

Liferay 7 - 单个博客项目的 ADT

Liferay 7.2 自定义文档和媒体 Portlet