2016-12-01 67 views
2

我正在使用webpack來處理和捆綁我的TypeScript模塊,但是我需要一些可從外部使用的模塊/塊。我該怎麼做呢?使用Webpack和Typescript將模塊公開到全局Window對象


附加信息

該代碼是在不同的目錄分裂,一個用於每個頁面(/分量)。每個頁面都包含多個文件,每個文件都包含一個模塊。它看起來是這樣的:

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我用:

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

其中通過M1.Module1.someFunc()從外部提供的功能。我的IDE和gulp-webpack都拋出一個錯誤,但最終仍然以某種方式工作。對我來說夠好!

+0

如果沒有'import x ='部分,你能逃脫嗎? –

+0

這也好像只是'import'expose-loader?M1!./ module1「' – IronSean

相關問題