使用外部jQuery将FullCalendar Browserify

25

我正在从CDN加载jQuery,但是当我尝试导入FullCalendar到我的脚本中时,出现了以下错误:

未捕获的错误:无法找到模块“jquery”

这是我的脚本:

'use strict'

import $ from 'jquery'
import 'fullcalendar'

$('#calendar').fullCalendar()

我正在运行以下命令来转换我的脚本:

browserify index.js -t babelify -x jquery > index.min.js

我的 HTML 代码如下:

<!DOCTYPE html>
<div id=calendar></div>
<script src=https://code.jquery.com/jquery-2.2.0.min.js></script>
<script src=index.min.js></script>

我还尝试过使用browserify-shimdepends: ['jquery', 'moment'],但没有任何区别。

我怀疑这是因为FullCalendar JS文件有一个UMD包装器,它自己执行require('jquery')require('moment'),但我认为external标志应该聪明到足以检测到这一点。

我有什么办法可以解决这个问题吗?

更新:这只是我想要实现的最小示例,但我的实际代码涉及比FullCalendar更多的依赖项,并且所有第三方依赖项都被连接成一个vendor.min.js文件,与我们的代码(例如index.js)分开。


你尝试过使用 browserify-shim 中的 expose global 部分吗?链接 - zero298
@zero298 这个库只是将自己附加到 $ 上,没有暴露任何东西。我已经成功地使用其他 jQuery 插件与外部 jQuery(带或不带 shim)一起工作,只是这个插件出了一些问题。 - rink.attendant.6
如果将脚本更改为 import $ 而不是 import $ from 'jquery',会发生什么? - Anthony
你有没有让它工作过? - Pasta
@Pasta 是的,但不幸的是我不记得我做了什么来让它工作。 - rink.attendant.6
显示剩余2条评论
1个回答

6

通过将fullcalendar工厂中的require('jquery')更改为$,我成功使其运行。

此外,在您的index.js文件中不需要使用import $ from 'jquery',因为它已经是fullcalendar npm的依赖项。

在运行之后:

browserify index.js -t babelify -x jquery > index.min.js

在fullcalendar工厂函数中编辑index.min.js文件,找到以下内容:
else if(typeof exports === 'object') {
    module.exports = factory(require('jquery'), require('moment'));
}

to:

else if(typeof exports === 'object') {
    module.exports = factory($, require('moment'));
}

或者,您可以直接在node_modules/fullcalendar/dist/fullcalendar.js文件中进行此编辑。

希望这有所帮助!


2
这并不是一个可行的选项,因为我的实际用例涉及将所有第三方依赖项(除了jQuery)连接到一个vendor.js文件中,而且要求团队中的每个人在安装时都修改node_modules中的文件也是不合理的。 - rink.attendant.6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接