Created
October 26, 2016 09:33
-
-
Save marinho/b7bf6c94d1b918c4c8678e57a605c64a to your computer and use it in GitHub Desktop.
Webpack test configuration to use angular2-template-loader correctly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @author: @AngularClass | |
*/ | |
const webpack = require('webpack'); | |
const helpers = require('./helpers'); | |
const path = require('path'); | |
/** | |
* Webpack Plugins | |
*/ | |
const ProvidePlugin = require('webpack/lib/ProvidePlugin'); | |
const DefinePlugin = require('webpack/lib/DefinePlugin'); | |
const WebpackShellPlugin = require('webpack-shell-plugin'); | |
/** | |
* Webpack Constants | |
*/ | |
const ENV = process.env.ENV = process.env.NODE_ENV = 'test'; | |
/** | |
* Webpack configuration | |
* | |
* See: http://webpack.github.io/docs/configuration.html#cli | |
*/ | |
module.exports = function(options) { | |
return { | |
/** | |
* Source map for Karma from the help of karma-sourcemap-loader & karma-webpack | |
* | |
* Do not change, leave as is or it wont work. | |
* See: https://github.com/webpack/karma-webpack#source-maps | |
*/ | |
devtool: 'inline-source-map', | |
/** | |
* Options affecting the resolving of modules. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#resolve | |
*/ | |
resolve: { | |
/** | |
* An array of extensions that should be used to resolve modules. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#resolve-extensions | |
*/ | |
extensions: ['', '.ts', '.js'], | |
/** | |
* Make sure root is src | |
*/ | |
root: helpers.root('src'), | |
alias: { | |
apis: path.resolve(__dirname, '../generated/apis') | |
}, | |
}, | |
/** | |
* Options affecting the normal modules. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#module | |
*/ | |
module: { | |
/** | |
* An array of applied pre and post loaders. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#module-preloaders-module-postloaders | |
*/ | |
preLoaders: [ | |
/** | |
* Tslint loader support for *.ts files | |
* | |
* See: https://github.com/wbuchwalter/tslint-loader | |
*/ | |
{ | |
test: /\.ts$/, | |
loader: 'tslint-loader', | |
exclude: [helpers.root('node_modules')] | |
}, | |
/** | |
* Source map loader support for *.js files | |
* Extracts SourceMaps for source files that as added as sourceMappingURL comment. | |
* | |
* See: https://github.com/webpack/source-map-loader | |
*/ | |
{ | |
test: /\.js$/, | |
loader: 'source-map-loader', | |
exclude: [ | |
// these packages have problems with their sourcemaps | |
helpers.root('node_modules/rxjs'), | |
helpers.root('node_modules/@angular') | |
] | |
} | |
], | |
/** | |
* An array of automatically applied loaders. | |
* | |
* IMPORTANT: The loaders here are resolved relative to the resource which they are applied to. | |
* This means they are not resolved relative to the configuration file. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#module-loaders | |
*/ | |
loaders: [ | |
/** | |
* Typescript loader support for .ts and Angular 2 async routes via .async.ts | |
* | |
* See: https://github.com/s-panferov/awesome-typescript-loader | |
*/ | |
{ | |
test: /\.ts$/, | |
loaders: [ // THIS IS RELEVANT - it must be in this order | |
'awesome-typescript-loader?sourceMap=false,inlineSourceMap=true,compilerOptions{}=removeComments:false', | |
'angular2-template-loader' | |
], | |
exclude: [/\.e2e\.ts$/] | |
}, | |
/** | |
* Json loader support for *.json files. | |
* | |
* See: https://github.com/webpack/json-loader | |
*/ | |
{ | |
test: /\.json$/, | |
loader: 'json-loader', | |
exclude: [helpers.root('src/index.html')] | |
}, | |
/* | |
* to string and css loader support for *.css files | |
* Returns file content as string | |
* | |
*/ | |
{ | |
test: /\.scss$/, | |
loaders: ['to-string-loader', 'css', 'sass'] // THIS IS RELEVANT - in case you use Sass, to-string-loader must come first | |
}, | |
/** | |
* Raw loader support for *.html | |
* Returns file content as string | |
* | |
* See: https://github.com/webpack/raw-loader | |
*/ | |
{ | |
test: /\.(html|css)$/, | |
loader: 'raw-loader', // THIS IS RELEVANT - both html and css | |
exclude: [helpers.root('src/index.html')] | |
} | |
], | |
/** | |
* An array of applied pre and post loaders. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#module-preloaders-module-postloaders | |
*/ | |
postLoaders: [ | |
/** | |
* Instruments JS files with Istanbul for subsequent code coverage reporting. | |
* Instrument only testing sources. | |
* | |
* See: https://github.com/deepsweet/istanbul-instrumenter-loader | |
*/ | |
{ | |
test: /\.(js|ts)$/, | |
loader: 'istanbul-instrumenter-loader', | |
include: helpers.root('src'), | |
exclude: [ | |
/\.(e2e|spec)\.ts$/, | |
/node_modules/ | |
] | |
} | |
] | |
}, | |
/** | |
* Add additional plugins to the compiler. | |
* | |
* See: http://webpack.github.io/docs/configuration.html#plugins | |
*/ | |
plugins: [ | |
/* | |
* Plugin: WebpackShellPlugin | |
* Description: Call shell command to generate Redux API files from Swagger definitions | |
* before the build starts. | |
* | |
* See: https://www.npmjs.com/package/webpack-shell-plugin | |
*/ | |
// new WebpackShellPlugin({ | |
// onBuildStart: [ | |
// 'npm run generate-api-clients', | |
// 'npm run generate-i18n-json-files' | |
// ] | |
// }), | |
/** | |
* Plugin: DefinePlugin | |
* Description: Define free variables. | |
* Useful for having development builds with debug logging or adding global constants. | |
* | |
* Environment helpers | |
* | |
* See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin | |
*/ | |
// NOTE: when adding more properties make sure you include them in custom-typings.d.ts | |
new DefinePlugin({ | |
'ENV': JSON.stringify(ENV), | |
'HMR': false, | |
'process.env': { | |
'ENV': JSON.stringify(ENV), | |
'NODE_ENV': JSON.stringify(ENV), | |
'HMR': false, | |
} | |
}), | |
/* | |
* This fixes the warning below: | |
* | |
* WARNING in ./~/@angular/core/src/linker/system_js_ng_module_factory_loader.js | |
* 57:15 Critical dependency: the request of a dependency is an expression | |
*/ | |
new webpack.ContextReplacementPlugin( | |
/angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, | |
__dirname | |
), | |
], | |
/** | |
* Static analysis linter for TypeScript advanced options configuration | |
* Description: An extensible linter for the TypeScript language. | |
* | |
* See: https://github.com/wbuchwalter/tslint-loader | |
*/ | |
tslint: { | |
emitErrors: false, | |
failOnHint: false, | |
resourcePath: 'src' | |
}, | |
/** | |
* Include polyfills or mocks for various node stuff | |
* Description: Node configuration | |
* | |
* See: https://webpack.github.io/docs/configuration.html#node | |
*/ | |
node: { | |
global: 'window', | |
process: false, | |
crypto: 'empty', | |
module: false, | |
clearImmediate: false, | |
setImmediate: false | |
} | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment