使用外部jQuery Browserify FullCalendar

rin*_*t.6 25 javascript jquery external fullcalendar browserify

我从CDN加载jQuery,当我尝试将FullCalendar导入我的脚本时会发生此错误:

未捕获错误:找不到模块'jquery'

这是我的脚本:

'use strict'

import $ from 'jquery'
import 'fullcalendar'

$('#calendar').fullCalendar()
Run Code Online (Sandbox Code Playgroud)

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

browserify index.js -t babelify -x jquery > index.min.js
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

我也试过了browserify-shim,depends: ['jquery', 'moment']但没有任何区别.

我怀疑这是因为FullCalendar JS文件有一个UMD包装,做自己的require('jquery')require('moment'),但我认为外部标志将足够聪明来检测这一点.

我可以解决这个问题吗?

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

小智 6

通过require('jquery')将fullcalendar工厂更改为,我能够使其工作$.

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

跑完之后

browserify index.js -t babelify -x jquery > index.min.js
Run Code Online (Sandbox Code Playgroud)

编辑fullcalendar工厂函数中的index.min.js文件,其中包含:

else if(typeof exports === 'object') {
    module.exports = factory(require('jquery'), require('moment'));
}
Run Code Online (Sandbox Code Playgroud)

至:

else if(typeof exports === 'object') {
    module.exports = factory($, require('moment'));
}
Run Code Online (Sandbox Code Playgroud)

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

我希望这有帮助!

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