1 const path = require('path');
2 const webpack = require('webpack');
3 const ProgressPlugin = require('webpack/lib/ProgressPlugin');
4 const HtmlWebpackPlugin = require('html-webpack-plugin');
5 const ExtractTextPlugin = require('extract-text-webpack-plugin');
6 const CleanWebpackPlugin = require('clean-webpack-plugin');
7 const autoprefixer = require('autoprefixer');
8 const postcssUrl = require('postcss-url');
9 const {GlobCopyWebpackPlugin, BaseHrefWebpackPlugin} = require('@angular/cli/plugins/webpack');
10 const {CommonsChunkPlugin} = require('webpack').optimize;
11 const {AotPlugin} = require('@ngtools/webpack');
12 var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
13 const nodeModules = path.join(process.cwd(), 'node_modules');
15 const bundledScripts = [
16 "script-loader!./node_modules/jquery/dist/jquery.min.js",
17 "script-loader!./node_modules/lodash/lodash.min.js",
18 "script-loader!./node_modules/angular/angular.min.js",
19 "script-loader!./node_modules/restangular/dist/restangular.min.js",
20 "script-loader!./node_modules/jqueryui/jquery-ui.min.js",
21 "script-loader!./node_modules/angular-ui-router/release/angular-ui-router.min.js",
22 "script-loader!./node_modules/angular-filter/dist/angular-filter.min.js",
23 "script-loader!./node_modules/angular-ui-bootstrap/dist/ui-bootstrap.js",
24 "script-loader!./node_modules/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js",
25 "script-loader!./node_modules/angular-resource/angular-resource.min.js",
26 "script-loader!./node_modules/angular-base64/angular-base64.min.js",
27 "script-loader!./node_modules/angular-uuid4/angular-uuid4.min.js",
28 "script-loader!./node_modules/angular-translate/dist/angular-translate.min.js",
29 "script-loader!./node_modules/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js",
30 "script-loader!./node_modules/angular-base64-upload/dist/angular-base64-upload.min.js",
31 "script-loader!./node_modules/angular-ui-notification/dist/angular-ui-notification.min.js",
32 "script-loader!./node_modules/cytoscape/dist/cytoscape.min.js",
33 "script-loader!./node_modules/checklist-model/checklist-model.js",
34 "script-loader!./node_modules/perfect-scrollbar/dist/js/perfect-scrollbar.jquery.min.js",
35 "script-loader!./node_modules/qtip2/dist/jquery.qtip.min.js",
36 "script-loader!./node_modules/@bardit/cytoscape-qtip/cytoscape-qtip.js",
37 "script-loader!./node_modules/js-md5/build/md5.min.js",
38 "script-loader!./node_modules/angular-clipboard/angular-clipboard.js",
39 "script-loader!./node_modules/angular-resizable/angular-resizable.min.js",
40 "script-loader!./node_modules/sdc-angular-dragdrop/src/angular-dragdrop.min.js",
41 "script-loader!./node_modules/angular-tooltips/dist/angular-tooltips.min.js",
42 "script-loader!./node_modules/angular-sanitize/angular-sanitize.min.js"
44 const baseHref = undefined;
45 const deployUrl = undefined;
47 // Arguments pass from webpack
48 const prod = process.argv.indexOf('-p') !== -1;
50 module.exports = function(params) {
52 const webpackCommonConfig = {
63 directives: path.join(__dirname, 'app/directives/'),
72 'scripts/main': [ './src/main.ts' ],
73 'scripts/polyfills': [ './src/polyfills.ts' ],
74 'scripts/vendor': bundledScripts,
75 'scripts/styles': [ "./src/styles.less" ]
82 loader: "source-map-loader",
83 exclude: [ path.join(__dirname, 'node_modules') ]
85 { test: /\.json$/, loader: "json-loader" },
86 { test: /\.html$/, loader: "html-loader" },
88 exclude: [ path.join(process.cwd(), "src/styles.less") ],
91 "exports-loader?module.exports.toString()",
92 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
97 exclude: [ path.join(process.cwd(), "src/styles.less") ],
98 test: /\.scss$|\.sass$/,
100 "exports-loader?module.exports.toString()",
101 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
107 exclude: [ path.join(process.cwd(), "src/styles.less") ],
110 "exports-loader?module.exports.toString()",
111 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
117 exclude: [ path.join(process.cwd(), "src/styles.less") ],
120 "exports-loader?module.exports.toString()",
121 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
123 "stylus-loader?{\"sourceMap\":false,\"paths\":[]}"
127 include: [ path.join(process.cwd(), "src/styles.less") ],
129 loaders: ExtractTextPlugin.extract({
131 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
134 fallback: "style-loader",
139 include: [ path.join(process.cwd(), "src/styles.less") ],
140 test: /\.scss$|\.sass$/,
141 loaders: ExtractTextPlugin.extract({
143 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
147 fallback: "style-loader",
152 include: [ path.join(process.cwd(), "src/styles.less") ],
154 loaders: ExtractTextPlugin.extract({
156 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
160 fallback: "style-loader",
165 include: [ path.join(process.cwd(), "src/styles.less") ],
167 loaders: ExtractTextPlugin.extract({
169 "css-loader?{\"sourceMap\":false,\"importLoaders\":1}",
171 "stylus-loader?{\"sourceMap\":false,\"paths\":[]}"
173 fallback: "style-loader",
177 { test: /\.ts$/, loader: "@ngtools/webpack" }
181 new CleanWebpackPlugin(['dist', 'build'], {
182 root: path.join(__dirname, ''),
185 exclude: ['shared.js']
187 new webpack.LoaderOptionsPlugin({
190 new webpack.DefinePlugin({
193 sdcConfig: prod? '"production"': '"development"'
197 new webpack.NoEmitOnErrorsPlugin(),
198 new ProgressPlugin(),
199 // new BundleAnalyzerPlugin(),
200 // new HtmlWebpackPlugin({
201 // template: "./src/index.html",
202 // filename: "./index.html",
211 // excludeChunks: [],
212 // title: "Webpack App",
214 // chunksSortMode: function sort(left, right) {
215 // let paramsString = params.entryPoints + '';
216 // let leftString = left.names[0].replace('scripts/','');
217 // let rightString = right.names[0].replace('scripts/','');
218 // let leftIndex = paramsString.indexOf(leftString);
219 // let rightindex = paramsString.indexOf(rightString);
220 // //console.log("left: " + leftString + " | leftIndex: " + leftIndex);
221 // //console.log("right: " + rightString + " | rightindex: " + rightindex);
222 // //console.log("result: " + leftIndex-rightindex);
223 // //console.log("----------------------------------------");
224 // return leftIndex-rightindex;
227 new GlobCopyWebpackPlugin({
229 "assets/preloading.css",
231 "assets/styles/fonts",
232 "assets/styles/images",
233 "assets/styles/app.css"
236 cwd: path.join(process.cwd(), "src"),
238 ignore: "**/.gitkeep"
241 new GlobCopyWebpackPlugin({
246 cwd: path.join(process.cwd(), ""),
248 ignore: "**/.gitkeep"
251 new BaseHrefWebpackPlugin({}),
252 new CommonsChunkPlugin({
253 name: "scripts/inline",
256 new CommonsChunkPlugin({
257 name: "scripts/vendor",
258 minChunks: (module) => module.resource && module.resource.startsWith(nodeModules),
263 new ExtractTextPlugin({
264 filename: "[name].bundle.css",
267 new webpack.LoaderOptionsPlugin({
274 // Only convert absolute URLs, which CSS-Loader won't process into require().
275 if (!URL.startsWith('/')) {
278 // Join together base-href, deploy-url and the original URL.
279 // Also dedupe multiple slashes into single ones.
280 return `/${baseHref || ''}/${deployUrl || ''}/${URL}`.replace(/\/\/+/g, '/');
296 exclude: [ "**/*.spec.ts" ],
297 tsConfigPath: "src/tsconfig.json",
298 skipCodeGeneration: true
309 clearImmediate: false,
314 return webpackCommonConfig;