2015-04-08 18 views
4

我第一次使用jspm並且已經遇到了一個障礙。如何填充非CommonJS,非AMD包依賴於全局jQuery和lodash?

我需要弄清楚如何「填充」一個專有腳本,它位於我們公司的私人npm註冊表上。

套餐:widget

  • 駐留在私有NPM註冊表
  • 就是不是一個CommonJS的,UMD/AMD模塊
  • 取決於lodashjquery,但假定他們在全球範圍內存在
  • 在全球範圍內公開Widget

這裏的(假設的)代碼

var Widget = { 
    render: function(el, symbol) { 
    symbol = _.trim(symbol); 
    $(el).text(symbol); 
    } 
}; 

app.js

var widget = require("Widget"); 
widget.render(document.getElementById("name"), " Fred "); 

的index.html

<body> 
    <div id="name"></div> 

    <script src="jspm_packages/system.js"></script> 
    <script src="config.js"></script> 
    <script> 
    System.import("app"); 
    </script> 
</body> 

當我在本地運行此頁Web服務器,我得到了一個錯誤:

Uncaught Reference: _ is not defined

我如何可以提供一個 「墊片」 爲widget

+0

like [this](https://github.com/abhianet/systemjs-ie8test)? – Abhishek

回答

0

你最好的賭注是,如果你能爲Widget包更新的package.json你可以告訴JSPM它需要一個墊片有:

{ 
    "shim": { 
    "widget": { "deps": ["jquery", "lodash"] } 
    } 
} 

(其中「小部件」是包裝內部的模塊名稱。)

如果由於某種原因,你不能直接觸摸的是NPM包,那麼你就可以在你JSPM安裝覆蓋墊片信息:

jspm install widget -o "{ shim: { 'widget': { deps: ['jquery', 'lodash'] } } }" 

(同樣,在那裏「部件」是模塊名稱,就像包裹本身內部的本地一樣。)

+0

這種方法適用於jquery依賴項,因爲從jspm註冊表引用的jquery包執行全局導出。但lodash別名引用npm:lodash並且這個特定的包不會導出全局。所以我的解決方法是從我的主模塊導入lodash並手動將其導出到窗口上。我在這個特定問題的systemjs中看到了一張票:https://github.com/jspm/registry/issues/431 – Max