2017-01-23 5 views
0

WebpackがUMDバンドルを作成するように設定すると、AMDとCommonJSのパッケージ名は小文字(脊髄の場合)になり、グローバルコンテキストの場合はCamelCase名?例えば、私は私のバンドルがCamelCaseと脊髄の名前を持つWebpack出力UMDライブラリ

(function webpackUniversalModuleDefinition(root, factory) { 
    if(typeof exports === 'object' && typeof module === 'object') 
     module.exports = factory(require("dependency")); 
    else if(typeof define === 'function' && define.amd) 
     define("my-library", ["dependency"], factory);   // spinal-case 
    else if(typeof exports === 'object') 
     exports["my-library"] = factory(require("dependency")); // spinal-case 
    else 
     root["MyLibrary"] = factory(root["dependency"]);   // CamelCase 
})... 

で始めることを期待

これはReactDOMでどのように見えるかです:

(function(f) { 
    // CommonJS 
    if (typeof exports === "object" && typeof module !== "undefined") { 
    module.exports = f(require('react')); 

    // RequireJS 
    } else if (typeof define === "function" && define.amd) { 
    define(['react'], f); 

    // <script> 
    } else { 
    var g; 
    if (typeof window !== "undefined") { 
     g = window; 
    } else if (typeof global !== "undefined") { 
     g = global; 
    } else if (typeof self !== "undefined") { 
     g = self; 
    } else { 
     // works providing we're not in "use strict"; 
     // needed for Java 8 Nashorn 
     // see https://github.com/facebook/react/issues/3037 
     g = this; 
    } 
    g.ReactDOM = f(g.React); 
    } 
})(function(React)... 

答えて

0

あなたはまたtrueにプロパティumdNamedDefineセットを持っている必要があります。これは、UMDラップされたライブラリを実行したときに私のoutputブロックが一般的にどのように見えるかです。私はそれがほとんどの実例であるように私は現在持っているNPMパッケージから例を使用します。

output: { 
    path: './lib', 
    filename: 'dom-regex.js', 
    library: 'DomRegex', 
    libraryTarget: 'umd', 
    umdNamedDefine: true 
}, 

は私のNPMパッケージはpackage.jsondom-regex命名されていることを考えると、これは私が次のように私のパッケージを使用することができます方法:

ES6:

import DomRegex from 'dom-regex'; 

RequireJS

ウィンドウで
var DomRegex = require('dom-regex'); 

:(ファイルがウィンドウに直接さらされている場合)

window.DomRegex 

何名がUMD包まれた部分のようにエクスポートされたことと同様に重要ではありませんそれをインポートするときに名前を付けます。私は(ないnode_modulesで)私のプロジェクトでそれをローカルに持っていた、とファイル名がdom-regex.jsた場合でも、それはUMD包まれているので、私はまだ、以前のすべての例を行うことができ、一例としてdom-regexを使用する:

どういたしましてrepo for dom-regexを調べて、このパッケージのダウンロード方法を確認してください。

+0

例として、ES6を使用している場合、 'react-dom; '、' ReactDOM = require(' react ');'からReactDOMをインポートします。 RequireJSを使い、単純にファイルにスクリプトを追加するだけで 'ReactDOM'(' window.ReactDOM')を呼び出すだけです。 ReactJSバンドルを参照してください。https://npmcdn.com/[email protected]/dist/react-dom.js –

+0

@AlexanderShutov、私は良い例で私の答えを更新しました。 。 – KevBot

+0

最後に私が必要とするものを得るために、 'umdDefineName'を削除しなければならなかったので、AMDとCommonJSのセクションは名前なしになります。 CommonJSはなんらかの理由でWebpackに残されていますが、WebpackやRollupでインポートすると幸運にも無視されます。最後に、[チームがそれをどう反応させるか]を見てください(https://github.com/facebook/react/blob/046f7448d7224da5b33441248a32a319a6464bc5/grunt/config/browserify.js#L98)。 –

関連する問題