1- const nxWebpack = require ( '@nrwl/react/plugins /webpack' )
2- const CopyPlugin = require ( "copy-webpack-plugin" ) ;
1+ const { composePlugins , withNx } = require ( '@nrwl/webpack' )
2+ const { withReact } = require ( '@nrwl/react' )
33const webpack = require ( 'webpack' )
4+ const CopyPlugin = require ( "copy-webpack-plugin" )
45const version = require ( '../../package.json' ) . version
56const fs = require ( 'fs' )
6- const BundleAnalyzerPlugin = require ( 'webpack-bundle-analyzer' ) . BundleAnalyzerPlugin ;
7+ const TerserPlugin = require ( "terser-webpack-plugin" )
8+ const CssMinimizerPlugin = require ( "css-minimizer-webpack-plugin" )
79
810const versionData = {
911 version : version ,
@@ -13,71 +15,87 @@ const versionData = {
1315
1416fs . writeFileSync ( './apps/remix-ide/src/assets/version.json' , JSON . stringify ( versionData ) )
1517
16- module . exports = config => {
17- const nxWebpackConfig = nxWebpack ( config )
18- const webpackConfig = {
19- ...nxWebpackConfig ,
20- resolve : {
21- ...nxWebpackConfig . resolve ,
22- fallback : {
23- ...nxWebpackConfig . resolve . fallback ,
24- "crypto" : require . resolve ( "crypto-browserify" ) ,
25- "stream" : require . resolve ( "stream-browserify" ) ,
26- "path" : require . resolve ( "path-browserify" ) ,
27- "http" : require . resolve ( "stream-http" ) ,
28- "https" : require . resolve ( "https-browserify" ) ,
29- "constants" : require . resolve ( "constants-browserify" ) ,
30- "os" : false , //require.resolve("os-browserify/browser"),
31- "timers" : false , // require.resolve("timers-browserify"),
32- "zlib" : require . resolve ( "browserify-zlib" ) ,
33- "fs" : false ,
34- "module" : false ,
35- "tls" : false ,
36- "net" : false ,
37- "readline" : false ,
38- "child_process" : false ,
39- "buffer" : require . resolve ( "buffer/" ) ,
40- "vm" : require . resolve ( 'vm-browserify' ) ,
41- } ,
42- } ,
43- externals : {
44- ...nxWebpackConfig . externals ,
45- solc : 'solc' ,
46- } ,
18+ // Nx plugins for webpack.
19+ module . exports = composePlugins ( withNx ( ) , withReact ( ) , ( config ) => {
20+ // Update the webpack config as needed here.
21+ // e.g. `config.plugins.push(new MyPlugin())`
4722
48- output : {
49- ...nxWebpackConfig . output ,
50- publicPath : '/' ,
51- filename : `[name].${ versionData . version } .${ versionData . timestamp } .js` ,
52- chunkFilename : `[name].${ versionData . version } .${ versionData . timestamp } .js` ,
53- } ,
54- plugins : [
55- ...nxWebpackConfig . plugins ,
56- //new BundleAnalyzerPlugin({
57- // analyzerMode: 'static'
58- //}),
59- new CopyPlugin ( {
60- patterns : [
61- { from : '../../node_modules/monaco-editor/dev/vs' , to : 'assets/js/monaco-editor/dev/vs' }
62- ] . filter ( Boolean )
63- } ) ,
64- new webpack . ProvidePlugin ( {
65- Buffer : [ 'buffer' , 'Buffer' ] ,
66- url : [ 'url' , 'URL' ] ,
67- process : 'process/browser' ,
68- } ) ,
69- ]
23+ // add fallback for node modules
24+ config . resolve . fallback = {
25+ ...config . resolve . fallback ,
26+ "crypto" : require . resolve ( "crypto-browserify" ) ,
27+ "stream" : require . resolve ( "stream-browserify" ) ,
28+ "path" : require . resolve ( "path-browserify" ) ,
29+ "http" : require . resolve ( "stream-http" ) ,
30+ "https" : require . resolve ( "https-browserify" ) ,
31+ "constants" : require . resolve ( "constants-browserify" ) ,
32+ "os" : false , //require.resolve("os-browserify/browser"),
33+ "timers" : false , // require.resolve("timers-browserify"),
34+ "zlib" : require . resolve ( "browserify-zlib" ) ,
35+ "fs" : false ,
36+ "module" : false ,
37+ "tls" : false ,
38+ "net" : false ,
39+ "readline" : false ,
40+ "child_process" : false ,
41+ "buffer" : require . resolve ( "buffer/" ) ,
42+ "vm" : require . resolve ( 'vm-browserify' ) ,
7043 }
44+
7145
72- webpackConfig . output . chunkLoadTimeout = 600000
73-
74- if ( process . env . NODE_ENV === 'production' ) {
75- return {
76- ...webpackConfig ,
77- mode : 'production' ,
78- devtool : 'source-map' ,
79- }
80- } else {
81- return webpackConfig
46+ // add externals
47+ config . externals = {
48+ ...config . externals ,
49+ solc : 'solc' ,
8250 }
83- }
51+
52+ // add public path
53+ config . output . publicPath = '/'
54+
55+ // set filename
56+ config . output . filename = `[name].${ versionData . version } .${ versionData . timestamp } .js`
57+ config . output . chunkFilename = `[name].${ versionData . version } .${ versionData . timestamp } .js`
58+
59+ // add copy & provide plugin
60+ config . plugins . push (
61+ new CopyPlugin ( {
62+ patterns : [
63+ { from : '../../node_modules/monaco-editor/dev/vs' , to : 'assets/js/monaco-editor/dev/vs' }
64+ ] . filter ( Boolean )
65+ } ) ,
66+ new webpack . ProvidePlugin ( {
67+ Buffer : [ 'buffer' , 'Buffer' ] ,
68+ url : [ 'url' , 'URL' ] ,
69+ process : 'process/browser' ,
70+ } )
71+ )
72+
73+ // souce-map loader
74+ config . module . rules . push ( {
75+ test : / \. j s $ / ,
76+ use : [ "source-map-loader" ] ,
77+ enforce : "pre"
78+ } )
79+
80+ config . ignoreWarnings = [ / F a i l e d t o p a r s e s o u r c e m a p / ] // ignore source-map-loader warnings
81+
82+
83+ // set minimizer
84+ config . optimization . minimizer = [
85+ new TerserPlugin ( {
86+ parallel : true ,
87+ terserOptions : {
88+ ecma : 2015 ,
89+ compress : false ,
90+ mangle : false ,
91+ format : {
92+ comments : false ,
93+ } ,
94+ } ,
95+ extractComments : false ,
96+ } ) ,
97+ new CssMinimizerPlugin ( ) ,
98+ ] ;
99+
100+ return config ;
101+ } ) ;
0 commit comments