Webpack 将编译后的打字稿输出为 (javascript) 字符串

Webpack output compiled typescript as (javascript) string

有谁知道如何将编译后的打字稿输出为可以使用 Extract-Text-Webpack-Plugin 提取的字符串?

目前我使用 "ts-loader" 将 TypeScript 文件转换为 JavaScript 文件。 然而,结果并不如预期,因为输出 JavaScript 与将由 NodeJs 执行的 Js 集成。

预期的结果是将 TypeScript 内容编译成 JavaScript 字符串,就像 Css 加载程序所做的那样,因此我可以使用 Extract-Text-WebPack-Plugin 来呈现编译后的 Javascript 内容到输出文件(一个捆绑的 js 文件,将用作浏览器端 javascript 库)。

不确定哪个 webpack 插件/加载器能够解决这个问题?

webpack.config.js

var webpack = require("webpack");
var ExtractTextPlugin = require("extract-text-webpack-plugin");

var exCss = new ExtractTextPlugin('[name].bundle.css');
var exScss = new ExtractTextPlugin('[name].bundle.css');


module.exports = {
    entry: {
        entry:"./src/entry.js"
    },
    devtool: "source-map",
    output: {
        path: __dirname + "/bundle",
        publicPath: "/assets/",
        filename: "[name].bundle.js"
    },
    resolve: {
        // Add `.ts` and `.tsx` as a resolvable extension.
        extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js', '.jsx']
    },
    module: {
        loaders: [
            { test:/\.ts$/, loader: "ts-loader" },
            { test: /\.css$/, loader: exCss.extract(["css"]) }
        ]
    },
    plugins: [exScss, exCss]
};

tsconfig.json

    {
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": true,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "typings"
  ]
}

TypeScript 文件:test.ts

class FirstType{
    firstProp: "ok";
}

let obj = new FirstType();
console.log(obj.firstProp);

预期结果:test.bundle.js

"use strict";
var FirstType = (function () {
    function FirstType() {
        this.firstProp = "ok";
    }
    return FirstType;
}());
var obj = new FirstType();
console.log(obj.firstProp);

不需要的实际结果:test.bundle.js

/******/ (function(modules) { // webpackBootstrap

......

function(module, exports) {

    "use strict";
    var FirstType = (function () {
        function FirstType() {
            this.firstProp = "ok";
        }
        return FirstType;
    }());
    var obj = new FirstType();
    console.log(obj.firstProp);
}
]);

您可以通过使用自定义加载器来实现。

module.exports = function(source){
    var src = source;
    src = src.replace(/\/ig, "\\");
    src = src.replace(/\'/ig, "\'");
    src = src.replace(/\"/ig, "\\"");
    src = src.replace(/\r/ig, "\r");
    src = src.replace(/\n/ig, "\n");
    return 'var content = "'+src+'";module.exports = content;';
};