2016-01-29 87 views
24

我从CDN加载jQuery的,当我尝试导入FullCalendar到我的剧本出现此错误:Browserify FullCalendar与外部的jQuery

Uncaught Error: Cannot find module 'jquery'

这里是我的脚本:

'use strict' 

import $ from 'jquery' 
import 'fullcalendar' 

$('#calendar').fullCalendar() 

我m跑这个命令来改变我的脚本:

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文件有一个自己的require('jquery')require('moment') UMD包装,但我认为外部标志将足够聪明,以检测到这一点。

任何方式我可以解决这个问题?

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

+0

您是否尝试过使用browserify-shim的[揭露全球](https://github.com/thlorenz/browserify-shim#a-expose-global-variables-via-global)部分? – zero298

+0

@ zero298图书馆只是将自己附加到'$'而没有暴露任何我相信的东西。我已经获得了其他jQuery插件与外部jQuery(无论有没有垫片)成功工作,只是因为某种原因没有这个。 –

+0

如果将脚本更改为'import $'而不是'从'jquery'导入$,会发生什么? – Anthony

回答

6

我能够通过将fullcalendar工厂中的require('jquery')更改为$来实现它。

另外,不需要在index.js文件中使用import $ from 'jquery'。它已经是fullcalendar npm的一个依赖。

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

到:

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

或者,您可以

运行

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

编辑index.min.js文件中的fullcalendar工厂函数,其中读取后直接在node_modules/fullcalendar/dist/fullcalendar.js文件中进行编辑。

我希望这有助于!

+2

这不是一个可行的选择,因为我的实际使用案例涉及将所有第三方依赖关系(除了jQuery)连接成一个' vendor.js'文件,并且在每次安装时要求团队中的每个人修改node_modules内的文件也是不合理的。 –