Created
April 13, 2017 07:32
-
-
Save Torins/4261480fcc51a8b0a50a141d62504178 to your computer and use it in GitHub Desktop.
multicompiler config
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
const path = require('path'); | |
const ProgressPlugin = require('webpack/lib/ProgressPlugin'); | |
const HtmlWebpackPlugin = require('html-webpack-plugin'); | |
const ExtractTextPlugin = require('extract-text-webpack-plugin'); | |
const autoprefixer = require('autoprefixer'); | |
const postcssUrl = require('postcss-url'); | |
const cssnano = require('cssnano'); | |
const { NoEmitOnErrorsPlugin, LoaderOptionsPlugin, DefinePlugin, HashedModuleIdsPlugin } = require('webpack'); | |
const { GlobCopyWebpackPlugin, BaseHrefWebpackPlugin, SuppressExtractedTextChunksWebpackPlugin } = require('@angular/cli/plugins/webpack'); | |
const { CommonsChunkPlugin, UglifyJsPlugin } = require('webpack').optimize; | |
const { AotPlugin } = require('@ngtools/webpack'); | |
const nodeModules = path.join(process.cwd(), 'node_modules'); | |
const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"]; | |
const baseHref = ""; | |
const deployUrl = ""; | |
languages = ['pl', 'en', 'es']; | |
module.exports = languages.map(lang => ({ | |
"devtool": false, | |
"resolve": { | |
"extensions": [ | |
".ts", | |
".js" | |
], | |
"modules": [ | |
"./node_modules" | |
] | |
}, | |
"resolveLoader": { | |
"modules": [ | |
"./node_modules" | |
] | |
}, | |
"entry": { | |
"main": [ | |
"./src/main.ts" | |
], | |
"polyfills": [ | |
"./src/polyfills.ts" | |
], | |
"styles": [ | |
"./src/styles.css" | |
] | |
}, | |
"output": { | |
"path": path.join(process.cwd(), `dist/${lang}`), | |
"filename": "[name].[chunkhash:20].bundle.js", | |
"chunkFilename": "[id].[chunkhash:20].chunk.js" | |
}, | |
"module": { | |
"rules": [ | |
{ | |
"enforce": "pre", | |
"test": /\.js$/, | |
"loader": "source-map-loader", | |
"exclude": [ | |
/\/node_modules\// | |
] | |
}, | |
{ | |
"test": /\.json$/, | |
"loader": "json-loader" | |
}, | |
{ | |
"test": /\.html$/, | |
"loader": "raw-loader" | |
}, | |
{ | |
"test": /\.(eot|svg)$/, | |
"loader": "file-loader?name=[name].[hash:20].[ext]" | |
}, | |
{ | |
"test": /\.(jpg|png|gif|otf|ttf|woff|woff2|cur|ani)$/, | |
"loader": "url-loader?name=[name].[hash:20].[ext]&limit=10000" | |
}, | |
{ | |
"exclude": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.css$/, | |
"loaders": [ | |
"exports-loader?module.exports.toString()", | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader" | |
] | |
}, | |
{ | |
"exclude": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.scss$|\.sass$/, | |
"loaders": [ | |
"exports-loader?module.exports.toString()", | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader", | |
"sass-loader" | |
] | |
}, | |
{ | |
"exclude": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.less$/, | |
"loaders": [ | |
"exports-loader?module.exports.toString()", | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader", | |
"less-loader" | |
] | |
}, | |
{ | |
"exclude": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.styl$/, | |
"loaders": [ | |
"exports-loader?module.exports.toString()", | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader", | |
"stylus-loader?{\"sourceMap\":false,\"paths\":[]}" | |
] | |
}, | |
{ | |
"include": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.css$/, | |
"loaders": ExtractTextPlugin.extract({ | |
"use": [ | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader" | |
], | |
"fallback": "style-loader", | |
"publicPath": "" | |
}) | |
}, | |
{ | |
"include": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.scss$|\.sass$/, | |
"loaders": ExtractTextPlugin.extract({ | |
"use": [ | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader", | |
"sass-loader" | |
], | |
"fallback": "style-loader", | |
"publicPath": "" | |
}) | |
}, | |
{ | |
"include": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.less$/, | |
"loaders": ExtractTextPlugin.extract({ | |
"use": [ | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader", | |
"less-loader" | |
], | |
"fallback": "style-loader", | |
"publicPath": "" | |
}) | |
}, | |
{ | |
"include": [ | |
path.join(process.cwd(), "src/styles.css") | |
], | |
"test": /\.styl$/, | |
"loaders": ExtractTextPlugin.extract({ | |
"use": [ | |
"css-loader?{\"sourceMap\":false,\"importLoaders\":1}", | |
"postcss-loader", | |
"stylus-loader?{\"sourceMap\":false,\"paths\":[]}" | |
], | |
"fallback": "style-loader", | |
"publicPath": "" | |
}) | |
}, | |
{ | |
"test": /\.ts$/, | |
"loader": "@ngtools/webpack" | |
} | |
] | |
}, | |
"plugins": [ | |
new NoEmitOnErrorsPlugin(), | |
new GlobCopyWebpackPlugin({ | |
"patterns": [ | |
"assets", | |
"favicon.ico" | |
], | |
"globOptions": { | |
"cwd": "/Users/daniel/Documents/multi-test/src", | |
"dot": true, | |
"ignore": "**/.gitkeep" | |
} | |
}), | |
new ProgressPlugin(), | |
new HtmlWebpackPlugin({ | |
"template": "./src/index.html", | |
"filename": "./index.html", | |
"hash": false, | |
"inject": true, | |
"compile": true, | |
"favicon": false, | |
"minify": false, | |
"cache": true, | |
"showErrors": true, | |
"chunks": "all", | |
"excludeChunks": [], | |
"title": "Webpack App", | |
"xhtml": true, | |
"chunksSortMode": function sort(left, right) { | |
let leftIndex = entryPoints.indexOf(left.names[0]); | |
let rightindex = entryPoints.indexOf(right.names[0]); | |
if (leftIndex > rightindex) { | |
return 1; | |
} | |
else if (leftIndex < rightindex) { | |
return -1; | |
} | |
else { | |
return 0; | |
} | |
} | |
}), | |
new BaseHrefWebpackPlugin({}), | |
new CommonsChunkPlugin({ | |
"name": "inline", | |
"minChunks": null | |
}), | |
new CommonsChunkPlugin({ | |
"name": "vendor", | |
"minChunks": (module) => module.resource && module.resource.startsWith(nodeModules), | |
"chunks": [ | |
"main" | |
] | |
}), | |
new ExtractTextPlugin({ | |
"filename": "[name].[contenthash:20].bundle.css", | |
"disable": false | |
}), | |
new LoaderOptionsPlugin({ | |
"sourceMap": false, | |
"options": { | |
"postcss": [ | |
autoprefixer(), | |
postcssUrl({"url": (URL) => { | |
// Only convert root relative URLs, which CSS-Loader won't process into require(). | |
if (!URL.startsWith('/') || URL.startsWith('//')) { | |
return URL; | |
} | |
if (deployUrl.match(/:\/\//)) { | |
// If deployUrl contains a scheme, ignore baseHref use deployUrl as is. | |
return `${deployUrl.replace(/\/$/, '')}${URL}`; | |
} | |
else if (baseHref.match(/:\/\//)) { | |
// If baseHref contains a scheme, include it as is. | |
return baseHref.replace(/\/$/, '') + | |
`/${deployUrl}/${URL}`.replace(/\/\/+/g, '/'); | |
} | |
else { | |
// Join together base-href, deploy-url and the original URL. | |
// Also dedupe multiple slashes into single ones. | |
return `/${baseHref}/${deployUrl}/${URL}`.replace(/\/\/+/g, '/'); | |
} | |
}}), | |
cssnano({ safe: true, autoprefixer: false }) | |
], | |
"sassLoader": { | |
"sourceMap": false, | |
"includePaths": [] | |
}, | |
"lessLoader": { | |
"sourceMap": false | |
}, | |
"context": "" | |
} | |
}), | |
new SuppressExtractedTextChunksWebpackPlugin(), | |
new DefinePlugin({ | |
"process.env.NODE_ENV": "\"production\"" | |
}), | |
new HashedModuleIdsPlugin({ | |
"hashFunction": "md5", | |
"hashDigest": "base64", | |
"hashDigestLength": 4 | |
}), | |
new UglifyJsPlugin({ | |
"mangle": { | |
"screw_ie8": true | |
}, | |
"compress": { | |
"screw_ie8": true, | |
"warnings": false | |
}, | |
"sourceMap": false | |
}), | |
new AotPlugin({ | |
"mainPath": "main.ts", | |
"hostReplacementPaths": { | |
"environments/environment.ts": "environments/environment.prod.ts" | |
}, | |
"exclude": [], | |
"tsConfigPath": "src/tsconfig.app.json", | |
"skipCodeGeneration": true | |
}) | |
], | |
"node": { | |
"fs": "empty", | |
"global": true, | |
"crypto": "empty", | |
"tls": "empty", | |
"net": "empty", | |
"process": true, | |
"module": false, | |
"clearImmediate": false, | |
"setImmediate": false | |
} | |
})); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment