Typescript 2.0 and Webpack importing of HTML as string
typescript, typescript2.0, webpack, webpack-html-loader
Solution
So after some tinkering I found a way to get this done. As i didn't want to add a 'exportAsEs6Default' query parameter to every import statement, I changed from an explicit loader for html to a configured loader.
I'll leave this question open in case someone knows a better way, as currently I'm not sure if I'm all to happy with this way (something native to typescript would be find without the need of a loader), but maybe it will help others facing the same problem.
So the import statement from the example above changed to
import templateString from "./Hello.html";
Together with an updated definition file
declare module "*.html" {
const content: string;
export default content;
}
And the webpack config file changed to this:
"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"
}
]
}
};
No change to the used packages.
Problem
I'm trying to import a HTML file as string with the help of webpack (Currently using webpack because TypeScript 2.0 doesn't support async/await on non ES6 targets). The problem I have is, even if the html-loader version from github supports a config flag 'exportAsEs6Default' i don't get it to set correctly. Is there any way to set a loader options globally? Because if I add the html-loader to the loaders section in the config file the loader is called twice causing the content to be nested. I have the following definition file to support importing of HTML (like in the example on the modules documentation) ``` declare module "html!*" { const content: string; export default content; } ``` The corresponsing import statement: ``` import templateString from "html!./Hello.html"; ``` The versions of the packages I use: ``` "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" ``` And the webpack config file ``` "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" } ] } }; ```