2016-09-15 56 views
0

因此,我沒有使用Node或WebPack服務器端,但仍然希望每隔一段時間使用npm中的模塊。我的客戶端使用requirejs,所以我需要AMD(首選)或CommonJS中的模塊。如何從npm作爲獨立的AMD/CommonJS模塊獲取模塊

我想archieve是一個腳本,需要模塊名稱+「外部依賴」作爲參數,並創建一個包含所有其他DEPS的模塊。

E.g.

sh npmtoamd.sh draft-js react react-dom 

它創建一個包含草案-JS的ES5 AMD模塊和它的所有依賴排除反應,反應-DOM。如果它不可能例如。在模塊中包含css文件和其他非js內容,例如提供它們。 draft-js.css是可以容忍的。

雖然我不使用Node或Webpack serverside,但我們可以在上述腳本中使用npm和webpack。

擷取來自NPM模塊是微不足道的部分,但我在怎麼做的WebPack件漂亮的丟失。我知道一個事實,即使我有可能在早些時候幫助完成它,但不要在任何地方放棄它,也不知道它是如何發展的。

+1

退房browserify。 – elmigranto

回答

0

我落得這樣做故宮取指在Java中,而不是一個批處理腳本啄終於得到它的工作。但沒有得到browserify工作。

繼承人我做什麼:

  1. 創建以下webpack.config。JS

    module.exports = { 
        entry: './main.js', 
        output: { 
        filename: 'bundle.js', 
        library:"<modulename>", 
        libraryTarget:"amd"  
    }, 
    externals: { 
    
         react: "React", 
        "react-dom": "ReactDOM", 
        immutable:"Immutable", 
        moment:"Moment" 
        } 
    
    }; 
    
  2. npm install <modulename>

  3. 創建以下main.js

    define('FOOBAR', ['<modulename>'], function(Foo) { 
        return Foo; 
    }); 
    
  4. 運行webpack main.js

1

我覺得elmigranto評論說,Browserify就是你要找的。不像其名稱所暗示的那樣,它可以在瀏覽器環境和節點環境中使用。簡而言之,它是這樣的:

Browserify從您給它的入口點文件開始,並使用源代碼的抽象語法樹的靜態分析來搜索任何require()調用。

對於每一個需要()在其與串打電話,browserify解決這些模塊字符串的文件路徑,然後搜索這些文件路徑需要(),直到整個依賴圖被訪問遞歸調用。

每個文件被連接成與映射靜態解析的名稱到內部ID的最低要求()定義一個JavaScript文件。

這意味着您生成的包是完全自包含的,並且具有應用程序需要使用的所有內容,且開銷可以忽略不計。

如果您查看一些demos,您可以看到所有依賴項(及其相關依賴項)都捆綁到一個文件中。
一個簡單的例子:

browserify main.js -o bundle.js 

在問候採用AMD以及Browserify supports it通過使用deamdify
使用AMD模塊:

browserify -t deamdify main.js -o bundle.js