2016-12-01 13 views
2

TypeScriptモジュールを処理してバンドルするためにwebpackを使用していますが、外部から利用できるモジュール/チャンクが必要です。これはどうすればいいですか?WebpackとTypescriptを使用してグローバルWindowオブジェクトにモジュールを公開


追加情報

コードは異なるディレクトリに分割され、各ページ(/成分)のための1つ。すべてのページには複数のファイルがあり、各ファイルにはモジュールが含まれています。

js/ 
    ├ page1/ 
    | ├ entry.ts 
    | ├ module1.ts 
    | └ module2.ts 
    ├ page2/ 
    | ├ entry.ts 
    | ├ module3.ts 
    | └ module4.ts 

活字体モジュールは

import {Module2} from "./module2"; 
export module Module1 { 

    export function someFunc():int { 
     return Module2.someVal; 
    } 

} 

のように定義されていて、私がコンパイルし、ページごとにモジュールをバンドルするがぶ飲み-のWebPACKを使用しています:

gulp.task('javascript', function() { 
    return gulp.src('src/js/**/entry.ts') 
     .pipe(named(function (file) { 
      // Sets file.named to the containing directory name (used by webpack) 
      return path.dirname(file.path).substr(path.dirname(file.path).replace(/\\/g, '/').lastIndexOf('/') + 1); 
     })) 
     .pipe(webpack({ 
      resolve: { 
       extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'] 
      }, 
      module: { 
       loaders: [ 
        {test: /\.tsx?$/, loader: 'ts-loader'} 
       ] 
      }, 
      plugins: [ 
       new CommonsChunkPlugin({ 
        name: "bundle", 
        minChunks: 3 
       }) 
      ], 
      output: { 
       filename: '[name].js' 
      }, 
      devtool: 'source-map' 
     })) 
     .pipe(gulp.dest('dest/js')) 
}); 
それは次のようになります

Module1.someFunc()は、グローバルスコープからアクセスできるようにする必要があるため、他の(外部の)コンポーネントで使用することができます。私はexpose loaderを見てきましたが、この状況でどのように動作するかわかりません。

ご協力いただければ幸いです!

答えて

0

とにかくローダーを公開する方法を知りました。 entry.tsでは私が使用:外部からM1.Module1.someFunc()を通じて利用できる機能を作っ

import x = require("expose-loader?M1!./module1"); 

。私のIDEとgulp-webpackはともにエラーを投げましたが、結局は何とかしていました。私のために十分に良い!

+0

'import x ='の部分がなくても、あなたはrequireを持っていますか? –

+0

これはちょうど 'import" expose-loaderとして機能していると思われますか?M1!./ module1 "' – IronSean

関連する問題