16

webpack を使用して HTML ファイルを文字列としてインポートしようとしています (TypeScript 2.0 は非 ES6 ターゲットで async/await をサポートしていないため、現在 webpack を使用しています)。

私が抱えている問題は、github の html-loader バージョンが構成フラグ「exportAsEs6Default」をサポートしていても、正しく設定できないことです。ローダー オプションをグローバルに設定する方法はありますか? 構成ファイルのローダー セクションに html-loader を追加すると、ローダーが 2 回呼び出され、コンテンツがネストされるためです。


HTML のインポートをサポートする次の定義ファイルがあります (モジュールのドキュメントの例のように)

declare module "html!*" {
    const content: string;
    export default content;
}

対応する import ステートメント:

import templateString from "html!./Hello.html";

私が使用するパッケージのバージョン:

"babel-core": "^6.17.0",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.16.0",
"html-loader": "git://github.com/webpack/html-loader.git#4633a1c00c86b78d119b7862c71b17dbf68d49de",
"ts-loader": "^0.9.5",
"typescript": "2.0.3",
"webpack": "^1.13.2"

そしてwebpack構成ファイル

"use strict";

module.exports = {
    entry: "./WebApp/Hello.ts",
    output: {
        path: "./wwwroot/compiled",
        filename: "app.bundle.js"
    },
    resolve: {
        extensions: ["", ".webpack.js", ".web.js", ".js", ".ts"]
    },
    module: {
        loaders: [
            {
                test: /\.ts$/,
                exclude: /node_modules/,
                loader: "babel-loader!ts-loader"
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            }
        ]
    }
};
4

1 に答える 1

21

それで、いじくり回した後、これを実現する方法を見つけました。「exportAsEs6Default」クエリ パラメータをすべてのインポート ステートメントに追加したくなかったので、html の明示的ローダーから構成済みローダーに変更しました。

誰かがより良い方法を知っている場合に備えて、この質問を開いたままにしますが、現在、この方法に満足しているかどうかはわかりません (タイプスクリプトにネイティブなものは、ローダーを必要とせずに見つかるでしょう)。同じ問題に直面している他の人を助けるでしょう。


したがって、上記の例の import ステートメントは次のように変更されます。

import templateString from "./Hello.html";

更新された定義ファイルと一緒に

declare module "*.html" {
    const content: string;
    export default content;
}

また、webpack 構成ファイルは次のように変更されました。

"use strict";

module.exports = {
    entry: "./WebApp/Hello.ts",
    output: {
        path: "./wwwroot/compiled",
        filename: "app.bundle.js"
    },
    resolve: {
        extensions: ["", ".webpack.js", ".web.js", ".js", ".ts", ".html"]
    },
    module: {
        loaders: [
            {
                test: /\.ts$/,
                exclude: /node_modules/,
                loader: "babel-loader!ts-loader"
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            },
            {
                test: /\.html$/,
                exclude: /node_modules/,
                loader: "html-loader?exportAsEs6Default"
            }
        ]
    }
};

使用パッケージに変更はありません。

于 2016-10-29T01:51:02.197 に答える