2016-01-29 80 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內的文件也是不合理的。 –