-
Notifications
You must be signed in to change notification settings - Fork 2
/
webpack.config.js
136 lines (132 loc) · 2.88 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
const path = require('path')
const webpack = require('webpack')
const ShakePlugin = require('webpack-common-shake').Plugin
const TerserPlugin = require('terser-webpack-plugin')
module.exports = {
entry: {
scripts: './variations/julia/ts/App.ts',
'scripts.min': './variations/julia/ts/App.ts'
},
externals: {
jquery: 'jQuery',
imagesloaded: 'imagesLoaded',
'masonry-layout': 'Masonry',
'jquery-hoverintent': 'jQuery',
gsap: '_gsScope',
select2: 'jQuery',
'slick-carousel': 'jQuery',
animejs: 'anime',
'js-cookie': 'Cookies',
circletype: 'CircleType',
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
terserOptions: {
ecma: 6,
},
include: /\.min\.js$/,
})
],
},
/**
* This is where our bundled stuff is saved and the public path is what we link to in our script tags
*/
output: {
path: path.resolve(__dirname, './assets/js'),
filename: '[name].js',
// Set this to whatever the relative asset path will be on your server
publicPath: '/'
},
/**
* Resolver helps webpack find module code that needs to be included for every bundle
*/
resolve: {
/**
* Specify which extensions we want to look at for module bundling
* Specify which extensions we want to look at for module bundling
*/
extensions: ['.ts', '.tsx', '.js']
},
module: {
/**
* Include our typescript and sass loaders
*/
rules: [
/**
* Loader for TSHint
*/
{
test: /\.ts$/,
enforce: 'pre',
loader: 'tslint-loader',
options: {
rules: {
configuration: require('./tslint.json')
}
}
},
/**
* Typescript loader, excludes node_modules in case any dependencies use ts
*/
{
test: /\.ts$/,
exclude: [/node_modules/],
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
},
{
loader: 'ts-loader',
options: {
transpileOnly: true
}
},
]
},
]
},
/**
* Include webpack plugins
*/
plugins: [
// new BrowserSyncPlugin({
// proxy: variationOptions.proxy,
// files: [
// '**/*.php',
// '**/*.css',
// 'assets/js/**/*.js',
// ],
// reloadDelay: 0,
// ui: false,
// notify: false,
// reloadOnRestart: true,
// open: false,
// browser: 'google chrome'
// }, {
// reload: true,
// }),
// new webpack.optimize.CommonsChunkPlugin({
// name: 'commons',
// filename: 'commons.js',
// /**
// * Automatically detect libraries in node_modules for bundling in common.js
// * @param module
// * @returns {boolean}
// */
// minChunks: (module) => {
// return module.context && module.context.indexOf('node_modules') !== -1
// }
// }),
new ShakePlugin(),
new webpack.BannerPlugin({
banner: '@codingStandardsIgnoreFile\nphpcs:ignoreFile',
include: ['scripts.js', 'scripts.min.js']
}),
]
}