@@ -6,22 +6,65 @@ const AssetsManifestPlugin = require('webpack-assets-manifest');
66const CleanPlugin = require ( 'clean-webpack-plugin' ) ;
77const ExtractTextPlugin = require ( 'extract-text-webpack-plugin' ) ;
88const ShellPlugin = require ( 'webpack-shell-plugin' ) ;
9- const MinifyPlugin = require ( 'babel-minify-webpack-plugin' ) ;
109const PurgeCssPlugin = require ( 'purgecss-webpack-plugin' ) ;
10+ const UglifyJsPlugin = require ( 'uglifyjs-webpack-plugin' ) ;
1111
1212// Custom PurgeCSS extractor for Tailwind that allows special characters in
1313// class names.
1414//
1515// https://github.com/FullHuman/purgecss#extractor
1616class TailwindExtractor {
17- static extract ( content ) {
17+ static extract ( content ) {
1818 return content . match ( / [ A - z 0 - 9 -:\/ ] + / g) || [ ] ;
1919 }
2020}
2121
22+ const basePlugins = [
23+ new CleanPlugin ( path . resolve ( __dirname , 'public/assets' ) ) ,
24+ new ShellPlugin ( {
25+ onBuildStart : [
26+ 'php artisan vue-i18n:generate' ,
27+ 'php artisan ziggy:generate resources/assets/scripts/helpers/ziggy.js' ,
28+ ] ,
29+ } ) ,
30+ new ExtractTextPlugin ( 'bundle-[chunkhash].css' , {
31+ allChunks : true ,
32+ } ) ,
33+ new AssetsManifestPlugin ( {
34+ writeToDisk : true ,
35+ publicPath : true ,
36+ integrity : true ,
37+ integrityHashes : [ 'sha384' ] ,
38+ } ) ,
39+ ] ;
40+
41+ const productionPlugins = [
42+ new PurgeCssPlugin ( {
43+ paths : glob . sync ( [
44+ path . join ( __dirname , 'resources/assets/scripts/**/*.vue' ) ,
45+ path . join ( __dirname , 'resources/themes/pterodactyl/**/*.blade.php' ) ,
46+ ] ) ,
47+ extractors : [
48+ {
49+ extractor : TailwindExtractor ,
50+ extensions : [ 'html' , 'js' , 'php' , 'vue' ] ,
51+ }
52+ ] ,
53+ } ) ,
54+ new UglifyJsPlugin ( {
55+ include : [
56+ path . join ( __dirname , 'resources/assets/scripts' ) ,
57+ path . join ( __dirname , 'node_modules' ) ,
58+ path . join ( __dirname , 'vendor/tightenco' ) ,
59+ ] ,
60+ cache : true ,
61+ parallel : 2 ,
62+ } ) ,
63+ ] ;
64+
2265module . exports = {
23- mode : process . env . APP_ENV ,
24- devtool : ' source-map',
66+ mode : process . env . NODE_ENV ,
67+ devtool : process . env . NODE_ENV === 'production' ? false : 'eval- source-map',
2568 performance : {
2669 hints : false ,
2770 } ,
@@ -38,21 +81,13 @@ module.exports = {
3881 {
3982 test : / \. v u e $ / ,
4083 loader : 'vue-loader' ,
41- options : {
42- postcss : [
43- require ( 'postcss-import' ) ,
44- require ( 'postcss-preset-env' ) ( { stage : 0 } ) ,
45- tailwind ( './tailwind.js' ) ,
46- require ( 'autoprefixer' ) ,
47- ]
48- }
4984 } ,
5085 {
5186 test : / \. j s $ / ,
5287 include : [
5388 path . resolve ( __dirname , 'resources' ) ,
5489 ] ,
55- loader : 'babel-loader' ,
90+ loader : 'babel-loader?cacheDirectory ' ,
5691 } ,
5792 {
5893 test : / \. c s s $ / ,
@@ -73,7 +108,7 @@ module.exports = {
73108 ident : 'postcss' ,
74109 plugins : [
75110 require ( 'postcss-import' ) ,
76- require ( 'tailwindcss' ) ( './tailwind.js' ) ,
111+ tailwind ( './tailwind.js' ) ,
77112 require ( 'postcss-preset-env' ) ( { stage : 0 } ) ,
78113 require ( 'autoprefixer' ) ,
79114 ]
@@ -87,44 +122,8 @@ module.exports = {
87122 alias : {
88123 'vue$' : 'vue/dist/vue.esm.js'
89124 } ,
90- extensions : [ '*' , '.js' , '.vue' , '.json' ]
125+ extensions : [ '.js' , '.vue' , '.json' ] ,
126+ symlinks : false ,
91127 } ,
92- plugins : [
93- new PurgeCssPlugin ( {
94- paths : glob . sync ( [
95- path . join ( __dirname , 'resources/assets/scripts/**/*.vue' ) ,
96- path . join ( __dirname , 'resources/themes/pterodactyl/**/*.blade.php' ) ,
97- ] ) ,
98- extractors : [
99- {
100- extractor : TailwindExtractor ,
101- extensions : [ 'html' , 'js' , 'php' , 'vue' ] ,
102- }
103- ] ,
104- } ) ,
105- new CleanPlugin ( path . resolve ( __dirname , 'public/assets' ) ) ,
106- new ShellPlugin ( {
107- onBuildStart : [
108- 'php artisan vue-i18n:generate' ,
109- 'php artisan ziggy:generate resources/assets/scripts/helpers/ziggy.js' ,
110- ] ,
111- } ) ,
112- new ExtractTextPlugin ( 'bundle-[chunkhash].css' , {
113- allChunks : true ,
114- } ) ,
115- new MinifyPlugin ( {
116- mangle : { topLevel : true } ,
117- } , {
118- include : [
119- path . resolve ( __dirname , 'resources' ) ,
120- path . resolve ( __dirname , 'node_modules' ) ,
121- ] ,
122- } ) ,
123- new AssetsManifestPlugin ( {
124- writeToDisk : true ,
125- publicPath : true ,
126- integrity : true ,
127- integrityHashes : [ 'sha384' ] ,
128- } ) ,
129- ]
128+ plugins : process . env . NODE_ENV === 'production' ? basePlugins . concat ( productionPlugins ) : basePlugins ,
130129} ;
0 commit comments