2016-12-12 2 views
6

私は2つのノードパッケージをまとめて作業しています。それらをライブラリとコンシューマと呼んでみましょう。ライブラリは、ブラウザ内にたくさんのものをレンダリングする責任があります。すべてのコンシューマーはimport Library from 'library'であり、Library(someConfigHere)と呼びます。基本的には、ライブラリがブラウザで期待していることを確認するためのテストです。依存関係を変換するためにBrowserifyを強制しますか?

私はnpm linkライブラリをコンシューマにコンバートしました.Browserify on Consumerを実行しようとしていますが、このエラーはParseError: 'import' and 'export' may appear only with 'sourceType: module'です。ライブラリには実際にES6 exportというステートメントが含まれているので、Browserifyは、ライブラリではなくコンシューマに対してのみ実行されていると推測しています。

だから私の質問は:また、どのようにも依存性を変換するためにBrowserifyを強制する方法はですか?

これは私のpackage.jsonです:

{ 
    "name": "consumer", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "start": "budo index.js --port $PORT", 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "babel-preset-es2015": "^6.13.2", 
    "babel-preset-react": "^6.11.1", 
    "babelify": "^7.3.0", 
    "browserify-shim": "^3.8.12" 
    }, 
    "browserify": { 
    "transform": [ 
     "babelify" 
    ] 
    }, 
    "babel": { 
    "presets": [ 
     "es2015", 
     "react" 
    ] 
    } 
} 

これは、消費者のindex.jsです:

import Library from 'library' // <= this is what isn't getting babelified 

console.log(Library); 

これは図書館のindex.jsです:

export default (config) => { 
    console.log('Testing testing') 
} 
+0

あなたの 'tsconfig.json'ファイルはどのように見えますか?そのような 'ParseError'は、TSコンパイラがファイルを通過しないように聞こえます。 –

+0

@DaveV私はTSコンパイラが何であるか分かりません。 AFAIK 'ParseError'はバベルの事です。 – Rob

答えて

4

Browserify変換がグローバルになるように構成することができ、その彼らがapになることを意味するnode_modules内のファイルにも貼り付けられています。

設定はトランスフォームです。

browserify().transform("babelify", { 
    global: true 
}) 

それとも、あなたはこのように、コマンドラインを使用している場合:それは、

browserify ... -t [ babelify --global ] ... 

あるいは、package.jsonでそれを設定するにはbabelifyで、あなたはこのようにそれを設定したいです

"browserify": { 
    "transform": [ 
    ["babelify", { "global": true }] 
    ] 
} 

:この(追加角括弧に注意してください)のようなものでなければなりません

Babelifyもignoreオプションを実装しています。したがって、node_modules内のファイルのみを変換するように設定することは可能です。詳細情報はhereです。

もう1つの解決策は、libraryモジュールのpackage.jsonに同様のbrowserify/babelifyの設定を含めることです。依存関係を処理する場合、Browserifyは依存関係のpacakge.jsonファイルの変換をチェックし、設定されているものを適用します。

+0

これは解決策のように聞こえますが、 'package.json'の' browserify'セクションでそれを表現する方法を知っていますか? – Rob

+1

'global:true'とヒットしたときに'予期しないトークン 'g''エラーが発生しました。私は二重引用符で囲み、そのエラーを無音にしようとしましたが、元の 'ParserError'を返します。バーベリファがその設定を尊重していないようです。 – Rob

+0

Babelifyはこの設定を使用する必要があります。私は過去にそれを使ってきたと確信しています。 browserifyが 'package.json'ファイルで使われている' global'設定を無視する可能性があります。実際には、それについて考えて、それはおそらく起こっていることです(私は確認するためにソースをチェックしなければならないでしょう)。もう1つのオプションは、消費しているモジュールの 'package.json'に同様の' browserify'設定を含めることです。 'global'設定は不要です。 – cartant

関連する問題