Use cache-loader and thread-loader instead of HappyPack
This commit is contained in:
		
							parent
							
								
									68e828e2e5
								
							
						
					
					
						commit
						69c4c1c8e1
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +1,8 @@ | |||||||
| /node_modules | /node_modules | ||||||
| package-lock.json | package-lock.json | ||||||
| npm-debug* | npm-debug* | ||||||
|  | yarn-error* | ||||||
|  | /.cache-loader | ||||||
| /dist | /dist | ||||||
| /public | /public | ||||||
| .idea | .idea | ||||||
|  | |||||||
| @ -6,14 +6,12 @@ const FaviconsWebpackPlugin = require("favicons-webpack-plugin"); | |||||||
| const CaseSensitivePathsPlugin = require("case-sensitive-paths-webpack-plugin"); | const CaseSensitivePathsPlugin = require("case-sensitive-paths-webpack-plugin"); | ||||||
| const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); | const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); | ||||||
| const DashboardPlugin = require("webpack-dashboard/plugin"); | const DashboardPlugin = require("webpack-dashboard/plugin"); | ||||||
| const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; | const BundleAnalyzerPlugin = require("webpack-bundle-analyzer") | ||||||
|  |   .BundleAnalyzerPlugin; | ||||||
| const MiniCssExtractPlugin = require("mini-css-extract-plugin"); | const MiniCssExtractPlugin = require("mini-css-extract-plugin"); | ||||||
| const HappyPack = require("happypack"); |  | ||||||
| const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); | const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); | ||||||
| 
 | 
 | ||||||
| const { | const { getClientEnvironment } = require("./env"); | ||||||
|     getClientEnvironment |  | ||||||
| } = require("./env"); |  | ||||||
| const paths = require("../paths"); | const paths = require("../paths"); | ||||||
| 
 | 
 | ||||||
| // Webpack uses `publicPath` to determine where the app is being served from.
 | // Webpack uses `publicPath` to determine where the app is being served from.
 | ||||||
| @ -24,225 +22,250 @@ const publicPath = paths.publicPath; | |||||||
| // Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.
 | // Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.
 | ||||||
| const publicUrl = paths.publicUrl.slice(0, -1); | const publicUrl = paths.publicUrl.slice(0, -1); | ||||||
| // Source maps are resource heavy and can cause out of memory issue for large source files.
 | // Source maps are resource heavy and can cause out of memory issue for large source files.
 | ||||||
| const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false'; | const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== "false"; | ||||||
| // Get environment variables to inject into our app.
 | // Get environment variables to inject into our app.
 | ||||||
| const environ = getClientEnvironment(publicUrl); | const environ = getClientEnvironment(publicUrl); | ||||||
| 
 | 
 | ||||||
| const postCssConfig = { | const postCssConfig = { | ||||||
|     loader: require.resolve("postcss-loader"), |   loader: require.resolve("postcss-loader"), | ||||||
|     options: { |   options: { | ||||||
|         // Necessary for external CSS imports to work
 |     // Necessary for external CSS imports to work
 | ||||||
|         // https://github.com/facebookincubator/create-react-app/issues/2677
 |     // https://github.com/facebookincubator/create-react-app/issues/2677
 | ||||||
|         ident: "postcss", |     ident: "postcss", | ||||||
|         plugins: () => [ |     plugins: () => [ | ||||||
|             require("postcss-flexbugs-fixes"), |       require("postcss-flexbugs-fixes"), | ||||||
|             require("postcss-preset-env")({ |       require("postcss-preset-env")({ | ||||||
|                 stage: 0, |         stage: 0 | ||||||
|             }), |       }) | ||||||
|         ], |     ] | ||||||
|     }, |   } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const sassConfig = { | const sassConfig = { | ||||||
|     loader: require.resolve("sass-loader"), |   loader: require.resolve("sass-loader"), | ||||||
|     options: {}, |   options: {} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const rules = (env) => { | const rules = env => { | ||||||
|     // "postcss" loader applies autoprefixer to our CSS.
 |   // "postcss" loader applies autoprefixer to our CSS.
 | ||||||
|     // "css" loader resolves paths in CSS and adds assets as dependencies.
 |   // "css" loader resolves paths in CSS and adds assets as dependencies.
 | ||||||
|     // "style" loader turns CSS into JS modules that inject <style> tags.
 |   // "style" loader turns CSS into JS modules that inject <style> tags.
 | ||||||
|     // In production, we use a plugin to extract that CSS to a file, but
 |   // In production, we use a plugin to extract that CSS to a file, but
 | ||||||
|     // in development "style" loader enables hot editing of CSS.
 |   // in development "style" loader enables hot editing of CSS.
 | ||||||
|     const styleLoader = |   const styleLoader = | ||||||
|         (env === "prod") ? { |     env === "prod" | ||||||
|             loader: MiniCssExtractPlugin.loader |       ? { | ||||||
|         } : require.resolve("style-loader"); |           loader: MiniCssExtractPlugin.loader | ||||||
|     const cssRule = { |         } | ||||||
|         test: /\.css$/, |       : require.resolve("style-loader"); | ||||||
|         use: [ |   const cssRule = { | ||||||
|             styleLoader, |     test: /\.css$/, | ||||||
|             { |     use: [ | ||||||
|                 loader: require.resolve("css-loader"), |       styleLoader, | ||||||
|                 options: { |       { | ||||||
|                     importLoaders: 1, |         loader: require.resolve("css-loader"), | ||||||
|                 }, |         options: { | ||||||
|             }, |           importLoaders: 1 | ||||||
|             postCssConfig, |         } | ||||||
|         ] |       }, | ||||||
|     }; |       postCssConfig | ||||||
|     const sassRule = { |     ] | ||||||
|         test: /\.scss$/, |   }; | ||||||
|         use: [ |   const sassRule = { | ||||||
|             styleLoader, |     test: /\.scss$/, | ||||||
|             { |     use: [ | ||||||
|                 loader: require.resolve("css-loader"), |       styleLoader, | ||||||
|                 options: { |       { | ||||||
|                     importLoaders: 1, |         loader: require.resolve("css-loader"), | ||||||
|                 }, |         options: { | ||||||
|             }, |           importLoaders: 1 | ||||||
|             postCssConfig, |         } | ||||||
|             sassConfig, |       }, | ||||||
|         ], |       postCssConfig, | ||||||
|     }; |       sassConfig | ||||||
|     return [{ |     ] | ||||||
|         // "oneOf" will traverse all following loaders until one will
 |   }; | ||||||
|         // match the requirements. when no loader matches it will fall
 |   return [ | ||||||
|         // back to the "file" loader at the end of the loader list.
 |     { | ||||||
|         oneOf: [ |       // "oneOf" will traverse all following loaders until one will
 | ||||||
|             // "url" loader works like "file" loader except that it embeds assets
 |       // match the requirements. when no loader matches it will fall
 | ||||||
|             // smaller than specified limit in bytes as data urls to avoid requests.
 |       // back to the "file" loader at the end of the loader list.
 | ||||||
|             // a missing `test` is equivalent to a match.
 |       oneOf: [ | ||||||
|             { |         // "url" loader works like "file" loader except that it embeds assets
 | ||||||
|                 test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], |         // smaller than specified limit in bytes as data urls to avoid requests.
 | ||||||
|                 loader: require.resolve("url-loader"), |         // a missing `test` is equivalent to a match.
 | ||||||
|                 options: { |         { | ||||||
|                     limit: (env === "prod") ? 10000 : 0, |           test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], | ||||||
|                     name: "static/media/[name].[hash:8].[ext]", |           loader: require.resolve("url-loader"), | ||||||
|                 }, |           options: { | ||||||
|             }, |             limit: env === "prod" ? 10000 : 0, | ||||||
|             cssRule, |             name: "static/media/[name].[hash:8].[ext]" | ||||||
|             sassRule, |           } | ||||||
|             // Process TypeScript with TSC through HappyPack.
 |  | ||||||
|             { |  | ||||||
|                 test: /\.tsx?$/, |  | ||||||
|                 use: "happypack/loader?id=ts", |  | ||||||
|                 include: [paths.clientDir, paths.commonDir], |  | ||||||
|             }, |  | ||||||
|             // "file" loader makes sure those assets get served by WebpackDevServer.
 |  | ||||||
|             // When you `import` an asset, you get its (virtual) filename.
 |  | ||||||
|             // In production, they would get copied to the `build` folder.
 |  | ||||||
|             // This loader doesn"t use a "test" so it will catch all modules
 |  | ||||||
|             // that fall through the other loaders.
 |  | ||||||
|             { |  | ||||||
|                 // Exclude `js` files to keep "css" loader working as it injects
 |  | ||||||
|                 // it"s runtime that would otherwise processed through "file" loader.
 |  | ||||||
|                 // Also exclude `html` and `json` extensions so they get processed
 |  | ||||||
|                 // by webpacks internal loaders.
 |  | ||||||
|                 exclude: [/\.js$/, /\.html$/, /\.json$/], |  | ||||||
|                 loader: require.resolve("file-loader"), |  | ||||||
|                 options: { |  | ||||||
|                     name: "static/media/[name].[hash:8].[ext]", |  | ||||||
|                 }, |  | ||||||
|             }, |  | ||||||
|         ], |  | ||||||
|     }, ]; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const getConfig = module.exports = (env) => { |  | ||||||
|     const isProd = (env === "prod"); |  | ||||||
|     const isDev = (env === "dev"); |  | ||||||
|     // Assert this just to be safe.
 |  | ||||||
|     // Development builds of React are slow and not intended for production.
 |  | ||||||
|     if (isProd && environ.stringified["process.env"].NODE_ENV !== '"production"') { |  | ||||||
|         throw new Error("Production builds must have NODE_ENV=production."); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     const plugins = [ |  | ||||||
|         new HtmlWebpackPlugin({ |  | ||||||
|             inject: true, |  | ||||||
|             template: paths.clientHtml, |  | ||||||
|             minify: isProd ? { |  | ||||||
|                 removeComments: true, |  | ||||||
|                 collapseWhitespace: true, |  | ||||||
|                 removeRedundantAttributes: true, |  | ||||||
|                 useShortDoctype: true, |  | ||||||
|                 removeEmptyAttributes: true, |  | ||||||
|                 removeStyleLinkTypeAttributes: true, |  | ||||||
|                 keepClosingSlash: true, |  | ||||||
|                 minifyJS: true, |  | ||||||
|                 minifyCSS: true, |  | ||||||
|                 minifyURLs: true, |  | ||||||
|             } : undefined, |  | ||||||
|         }), |  | ||||||
|         new FaviconsWebpackPlugin(path.resolve(paths.clientDir, "images", "favicon-96x96.png")), |  | ||||||
|         // Makes some environment variables available to the JS code, for example:
 |  | ||||||
|         // if (process.env.NODE_ENV === "production") { ... }. See `./env.js`.
 |  | ||||||
|         // It is absolutely essential that NODE_ENV was set to production here.
 |  | ||||||
|         // Otherwise React will be compiled in the very slow development mode.
 |  | ||||||
|         new webpack.DefinePlugin(environ.stringified), |  | ||||||
|         new CaseSensitivePathsPlugin(), |  | ||||||
|         isProd && new UglifyJsPlugin({ |  | ||||||
|             sourceMap: shouldUseSourceMap, |  | ||||||
|         }), |  | ||||||
|         isDev && new webpack.HotModuleReplacementPlugin(), |  | ||||||
|         new webpack.NamedModulesPlugin(), |  | ||||||
|         new HappyPack({ |  | ||||||
|             id: "ts", |  | ||||||
|             threads: 2, |  | ||||||
|             loaders: [{ |  | ||||||
|                 loader: "ts-loader", |  | ||||||
|                 options: { |  | ||||||
|                     configFile: paths.clientTsConfig, |  | ||||||
|                     happyPackMode: true, |  | ||||||
|                 }, |  | ||||||
|             }], |  | ||||||
|         }), |  | ||||||
|         new ForkTsCheckerWebpackPlugin({ |  | ||||||
|             checkSyntacticErrors: true, |  | ||||||
|             tsconfig: paths.clientTsConfig, |  | ||||||
|             tslint: paths.resolveRoot("tslint.json"), |  | ||||||
|         }), |  | ||||||
|         isDev && new DashboardPlugin(), |  | ||||||
|         new BundleAnalyzerPlugin({ |  | ||||||
|             analyzerMode: "static", |  | ||||||
|             openAnalyzer: false, |  | ||||||
|             reportFilename: path.resolve(paths.serverBuildDir, "report.html"), |  | ||||||
|         }), |  | ||||||
|         new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), |  | ||||||
|         isProd && new MiniCssExtractPlugin({ |  | ||||||
|             filename: "static/css/[name].[chunkhash:8].css", |  | ||||||
|             chunkFilename: "static/css/[id].[chunkhash:8].css", |  | ||||||
|         }) |  | ||||||
|     ].filter(Boolean); |  | ||||||
| 
 |  | ||||||
|     return { |  | ||||||
|         mode: isProd ? "production" : "development", |  | ||||||
|         bail: isProd, |  | ||||||
|         devtool: shouldUseSourceMap ? |  | ||||||
|             isProd ? "source-map" : "inline-source-map" : false, |  | ||||||
|         entry: [ |  | ||||||
|             isDev && require.resolve("react-hot-loader/patch"), |  | ||||||
|             isDev && require.resolve("react-dev-utils/webpackHotDevClient"), |  | ||||||
|             require.resolve("./polyfills"), |  | ||||||
|             paths.clientEntry, |  | ||||||
|         ].filter(Boolean), |  | ||||||
|         output: { |  | ||||||
|             path: paths.clientBuildDir, |  | ||||||
|             pathinfo: isDev, |  | ||||||
|             filename: isProd ? |  | ||||||
|                 'static/js/[name].[chunkhash:8].js' : "static/js/bundle.js", |  | ||||||
|             chunkFilename: isProd ? |  | ||||||
|                 'static/js/[name].[chunkhash:8].chunk.js' : "static/js/[name].chunk.js", |  | ||||||
|             publicPath: publicPath, |  | ||||||
|             devtoolModuleFilenameTemplate: isDev ? |  | ||||||
|                 (info) => |  | ||||||
|                 "webpack://" + path.resolve(info.absoluteResourcePath).replace(/\\/g, "/") : undefined, |  | ||||||
|         }, |         }, | ||||||
|         resolve: { |         cssRule, | ||||||
|             extensions: [".ts", ".tsx", ".js", ".json", ".scss"], |         sassRule, | ||||||
|             alias: { |         // Process TypeScript with TSC through HappyPack.
 | ||||||
|                 "@client": paths.clientDir, |         { | ||||||
|                 "@common": paths.commonDir, |           test: /\.tsx?$/, | ||||||
|  |           include: [paths.clientDir, paths.commonDir], | ||||||
|  |           use: [ | ||||||
|  |             { loader: "cache-loader" }, | ||||||
|  |             { | ||||||
|  |               loader: "thread-loader", | ||||||
|  |               options: { | ||||||
|  |                 workers: require("os").cpus().length - 1 | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               loader: "ts-loader", | ||||||
|  |               options: { | ||||||
|  |                 configFile: paths.clientTsConfig, | ||||||
|  |                 happyPackMode: true | ||||||
|  |               } | ||||||
|             } |             } | ||||||
|  |           ] | ||||||
|         }, |         }, | ||||||
|         module: { |         // "file" loader makes sure those assets get served by WebpackDevServer.
 | ||||||
|             rules: rules(env), |         // When you `import` an asset, you get its (virtual) filename.
 | ||||||
|         }, |         // In production, they would get copied to the `build` folder.
 | ||||||
|         plugins: plugins, |         // This loader doesn"t use a "test" so it will catch all modules
 | ||||||
|         optimization: { |         // that fall through the other loaders.
 | ||||||
|             namedModules: isProd, |         { | ||||||
|         }, |           // Exclude `js` files to keep "css" loader working as it injects
 | ||||||
|         devServer: { |           // it"s runtime that would otherwise processed through "file" loader.
 | ||||||
|             hot: true, |           // Also exclude `html` and `json` extensions so they get processed
 | ||||||
|             historyApiFallback: true, |           // by webpacks internal loaders.
 | ||||||
|             host: "0.0.0.0", |           exclude: [/\.js$/, /\.html$/, /\.json$/], | ||||||
|             port: 8081, |           loader: require.resolve("file-loader"), | ||||||
|             proxy: [{ |           options: { | ||||||
|                 context: ["/api"], |             name: "static/media/[name].[hash:8].[ext]" | ||||||
|                 target: paths.publicUrl, |           } | ||||||
|             }], |         } | ||||||
|         }, |       ] | ||||||
|     } |     } | ||||||
| }; |   ]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const getConfig = (module.exports = env => { | ||||||
|  |   const isProd = env === "prod"; | ||||||
|  |   const isDev = env === "dev"; | ||||||
|  |   // Assert this just to be safe.
 | ||||||
|  |   // Development builds of React are slow and not intended for production.
 | ||||||
|  |   if ( | ||||||
|  |     isProd && | ||||||
|  |     environ.stringified["process.env"].NODE_ENV !== '"production"' | ||||||
|  |   ) { | ||||||
|  |     throw new Error("Production builds must have NODE_ENV=production."); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   const plugins = [ | ||||||
|  |     new HtmlWebpackPlugin({ | ||||||
|  |       inject: true, | ||||||
|  |       template: paths.clientHtml, | ||||||
|  |       minify: isProd | ||||||
|  |         ? { | ||||||
|  |             removeComments: true, | ||||||
|  |             collapseWhitespace: true, | ||||||
|  |             removeRedundantAttributes: true, | ||||||
|  |             useShortDoctype: true, | ||||||
|  |             removeEmptyAttributes: true, | ||||||
|  |             removeStyleLinkTypeAttributes: true, | ||||||
|  |             keepClosingSlash: true, | ||||||
|  |             minifyJS: true, | ||||||
|  |             minifyCSS: true, | ||||||
|  |             minifyURLs: true | ||||||
|  |           } | ||||||
|  |         : undefined | ||||||
|  |     }), | ||||||
|  |     new FaviconsWebpackPlugin( | ||||||
|  |       path.resolve(paths.clientDir, "images", "favicon-96x96.png") | ||||||
|  |     ), | ||||||
|  |     // Makes some environment variables available to the JS code, for example:
 | ||||||
|  |     // if (process.env.NODE_ENV === "production") { ... }. See `./env.js`.
 | ||||||
|  |     // It is absolutely essential that NODE_ENV was set to production here.
 | ||||||
|  |     // Otherwise React will be compiled in the very slow development mode.
 | ||||||
|  |     new webpack.DefinePlugin(environ.stringified), | ||||||
|  |     new CaseSensitivePathsPlugin(), | ||||||
|  |     isProd && | ||||||
|  |       new UglifyJsPlugin({ | ||||||
|  |         sourceMap: shouldUseSourceMap | ||||||
|  |       }), | ||||||
|  |     isDev && new webpack.HotModuleReplacementPlugin(), | ||||||
|  |     new webpack.NamedModulesPlugin(), | ||||||
|  |     new ForkTsCheckerWebpackPlugin({ | ||||||
|  |       checkSyntacticErrors: true, | ||||||
|  |       tsconfig: paths.clientTsConfig, | ||||||
|  |       tslint: paths.tslintConfig | ||||||
|  |     }), | ||||||
|  |     isDev && new DashboardPlugin(), | ||||||
|  |     new BundleAnalyzerPlugin({ | ||||||
|  |       analyzerMode: "static", | ||||||
|  |       openAnalyzer: false, | ||||||
|  |       reportFilename: path.resolve(paths.serverBuildDir, "report.html") | ||||||
|  |     }), | ||||||
|  |     new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), | ||||||
|  |     isProd && | ||||||
|  |       new MiniCssExtractPlugin({ | ||||||
|  |         filename: "static/css/[name].[chunkhash:8].css", | ||||||
|  |         chunkFilename: "static/css/[id].[chunkhash:8].css" | ||||||
|  |       }) | ||||||
|  |   ].filter(Boolean); | ||||||
|  | 
 | ||||||
|  |   return { | ||||||
|  |     mode: isProd ? "production" : "development", | ||||||
|  |     bail: isProd, | ||||||
|  |     devtool: shouldUseSourceMap | ||||||
|  |       ? isProd | ||||||
|  |         ? "source-map" | ||||||
|  |         : "inline-source-map" | ||||||
|  |       : false, | ||||||
|  |     entry: [ | ||||||
|  |       isDev && require.resolve("react-hot-loader/patch"), | ||||||
|  |       isDev && require.resolve("react-dev-utils/webpackHotDevClient"), | ||||||
|  |       require.resolve("./polyfills"), | ||||||
|  |       paths.clientEntry | ||||||
|  |     ].filter(Boolean), | ||||||
|  |     output: { | ||||||
|  |       path: paths.clientBuildDir, | ||||||
|  |       pathinfo: isDev, | ||||||
|  |       filename: isProd | ||||||
|  |         ? "static/js/[name].[chunkhash:8].js" | ||||||
|  |         : "static/js/bundle.js", | ||||||
|  |       chunkFilename: isProd | ||||||
|  |         ? "static/js/[name].[chunkhash:8].chunk.js" | ||||||
|  |         : "static/js/[name].chunk.js", | ||||||
|  |       publicPath: publicPath, | ||||||
|  |       devtoolModuleFilenameTemplate: isDev | ||||||
|  |         ? info => | ||||||
|  |             "webpack://" + | ||||||
|  |             path.resolve(info.absoluteResourcePath).replace(/\\/g, "/") | ||||||
|  |         : undefined | ||||||
|  |     }, | ||||||
|  |     resolve: { | ||||||
|  |       extensions: [".ts", ".tsx", ".js", ".json", ".scss"], | ||||||
|  |       alias: { | ||||||
|  |         "@client": paths.clientDir, | ||||||
|  |         "@common": paths.commonDir | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     module: { | ||||||
|  |       rules: rules(env) | ||||||
|  |     }, | ||||||
|  |     plugins: plugins, | ||||||
|  |     optimization: { | ||||||
|  |       namedModules: isProd | ||||||
|  |     }, | ||||||
|  |     devServer: { | ||||||
|  |       hot: true, | ||||||
|  |       historyApiFallback: true, | ||||||
|  |       host: "0.0.0.0", | ||||||
|  |       port: 8081, | ||||||
|  |       proxy: [ | ||||||
|  |         { | ||||||
|  |           context: ["/api"], | ||||||
|  |           target: paths.publicUrl | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | }); | ||||||
|  | |||||||
							
								
								
									
										37
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								package.json
									
									
									
									
									
								
							| @ -46,13 +46,13 @@ | |||||||
|     "express-promise-router": "^3.0.3", |     "express-promise-router": "^3.0.3", | ||||||
|     "jsonwebtoken": "^8.3.0", |     "jsonwebtoken": "^8.3.0", | ||||||
|     "lodash": "^4.17.10", |     "lodash": "^4.17.10", | ||||||
|     "mobx": "^5.0.3", |     "mobx": "^5.1.0", | ||||||
|     "mobx-utils": "^5.0.1", |     "mobx-utils": "^5.0.1", | ||||||
|     "module-alias": "^2.1.0", |     "module-alias": "^2.1.0", | ||||||
|     "moment": "^2.22.2", |     "moment": "^2.22.2", | ||||||
|     "mqtt": "^2.18.3", |     "mqtt": "^2.18.8", | ||||||
|     "pg": "^7.4.3", |     "pg": "^7.4.3", | ||||||
|     "pino": "^5.2.0", |     "pino": "^5.4.0", | ||||||
|     "pump": "^3.0.0", |     "pump": "^3.0.0", | ||||||
|     "reflect-metadata": "^0.1.12", |     "reflect-metadata": "^0.1.12", | ||||||
|     "serializr": "^1.3.0", |     "serializr": "^1.3.0", | ||||||
| @ -70,13 +70,13 @@ | |||||||
|     "@types/jsonwebtoken": "^7.2.8", |     "@types/jsonwebtoken": "^7.2.8", | ||||||
|     "@types/lodash": "^4.14.116", |     "@types/lodash": "^4.14.116", | ||||||
|     "@types/module-alias": "^2.0.0", |     "@types/module-alias": "^2.0.0", | ||||||
|     "@types/node": "^10.7.1", |     "@types/node": "^10.9.4", | ||||||
|     "@types/object-assign": "^4.0.30", |     "@types/object-assign": "^4.0.30", | ||||||
|     "@types/pino": "^4.16.1", |     "@types/pino": "^5.20.0", | ||||||
|     "@types/prop-types": "^15.5.5", |     "@types/prop-types": "^15.5.5", | ||||||
|     "@types/pump": "^1.0.1", |     "@types/pump": "^1.0.1", | ||||||
|     "@types/query-string": "^6.1.0", |     "@types/query-string": "^6.1.0", | ||||||
|     "@types/react": "16.4.11", |     "@types/react": "16.4.13", | ||||||
|     "@types/react-dom": "16.0.7", |     "@types/react-dom": "16.0.7", | ||||||
|     "@types/react-hot-loader": "^4.1.0", |     "@types/react-hot-loader": "^4.1.0", | ||||||
|     "@types/react-router-dom": "^4.3.0", |     "@types/react-router-dom": "^4.3.0", | ||||||
| @ -85,23 +85,23 @@ | |||||||
|     "@types/webpack-env": "^1.13.6", |     "@types/webpack-env": "^1.13.6", | ||||||
|     "@types/ws": "^6.0.0", |     "@types/ws": "^6.0.0", | ||||||
|     "async": "^2.6.1", |     "async": "^2.6.1", | ||||||
|     "autoprefixer": "^9.1.2", |     "autoprefixer": "^9.1.3", | ||||||
|  |     "cache-loader": "^1.2.2", | ||||||
|     "case-sensitive-paths-webpack-plugin": "^2.1.2", |     "case-sensitive-paths-webpack-plugin": "^2.1.2", | ||||||
|     "classnames": "^2.2.6", |     "classnames": "^2.2.6", | ||||||
|     "css-loader": "^1.0.0", |     "css-loader": "^1.0.0", | ||||||
|     "dotenv": "^6.0.0", |     "dotenv": "^6.0.0", | ||||||
|     "favicons-webpack-plugin": "^0.0.9", |     "favicons-webpack-plugin": "^0.0.9", | ||||||
|     "file-loader": "^1.1.11", |     "file-loader": "^2.0.0", | ||||||
|     "font-awesome": "^4.7.0", |     "font-awesome": "^4.7.0", | ||||||
|     "fork-ts-checker-webpack-plugin": "^0.4.9", |     "fork-ts-checker-webpack-plugin": "^0.4.9", | ||||||
|     "happypack": "^5.0.0", |  | ||||||
|     "html-webpack-plugin": "^3.2.0", |     "html-webpack-plugin": "^3.2.0", | ||||||
|     "mini-css-extract-plugin": "^0.4.1", |     "mini-css-extract-plugin": "^0.4.2", | ||||||
|     "mobx-react": "^5.2.5", |     "mobx-react": "^5.2.5", | ||||||
|     "mobx-react-devtools": "^6.0.3", |     "mobx-react-devtools": "^6.0.3", | ||||||
|     "mobx-react-router": "^4.0.4", |     "mobx-react-router": "^4.0.4", | ||||||
|     "node-sass": "^4.9.3", |     "node-sass": "^4.9.3", | ||||||
|     "nodemon": "^1.18.3", |     "nodemon": "^1.18.4", | ||||||
|     "npm-run-all": "^4.1.3", |     "npm-run-all": "^4.1.3", | ||||||
|     "object-assign": "^4.1.1", |     "object-assign": "^4.1.1", | ||||||
|     "postcss-flexbugs-fixes": "^4.1.0", |     "postcss-flexbugs-fixes": "^4.1.0", | ||||||
| @ -111,31 +111,32 @@ | |||||||
|     "prop-types": "^15.6.2", |     "prop-types": "^15.6.2", | ||||||
|     "query-string": "^6.1.0", |     "query-string": "^6.1.0", | ||||||
|     "react": "16.4.2", |     "react": "16.4.2", | ||||||
|     "react-dev-utils": "^5.0.1", |     "react-dev-utils": "^5.0.2", | ||||||
|     "react-dom": "16.4.2", |     "react-dom": "16.4.2", | ||||||
|     "react-hot-loader": "^4.3.4", |     "react-hot-loader": "^4.3.5", | ||||||
|     "react-router": "^4.3.1", |     "react-router": "^4.3.1", | ||||||
|     "react-router-dom": "^4.3.1", |     "react-router-dom": "^4.3.1", | ||||||
|     "react-sortable-hoc": "^0.8.3", |     "react-sortable-hoc": "^0.8.3", | ||||||
|     "sass-loader": "^7.1.0", |     "sass-loader": "^7.1.0", | ||||||
|     "semantic-ui-css": "^2.3.3", |     "semantic-ui-css": "^2.3.3", | ||||||
|     "semantic-ui-react": "^0.82.2", |     "semantic-ui-react": "^0.82.3", | ||||||
|     "source-map-loader": "^0.2.4", |     "source-map-loader": "^0.2.4", | ||||||
|     "style-loader": "^0.22.1", |     "style-loader": "^0.23.0", | ||||||
|  |     "thread-loader": "^1.2.0", | ||||||
|     "ts-loader": "^4.5.0", |     "ts-loader": "^4.5.0", | ||||||
|     "tslint": "^5.11.0", |     "tslint": "^5.11.0", | ||||||
|     "tslint-config-prettier": "^1.15.0", |     "tslint-config-prettier": "^1.15.0", | ||||||
|     "tslint-consistent-codestyle": "^1.13.3", |     "tslint-consistent-codestyle": "^1.13.3", | ||||||
|     "tslint-react": "^3.6.0", |     "tslint-react": "^3.6.0", | ||||||
|     "typescript": "^3.0.1", |     "typescript": "^3.0.3", | ||||||
|     "uglify-es": "^3.3.9", |     "uglify-es": "^3.3.9", | ||||||
|     "uglifyjs-webpack-plugin": "^1.3.0", |     "uglifyjs-webpack-plugin": "^1.3.0", | ||||||
|     "url-loader": "^1.1.1", |     "url-loader": "^1.1.1", | ||||||
|     "webpack": "^4.16.5", |     "webpack": "^4.17.1", | ||||||
|     "webpack-bundle-analyzer": "^2.13.1", |     "webpack-bundle-analyzer": "^2.13.1", | ||||||
|     "webpack-cli": "^3.1.0", |     "webpack-cli": "^3.1.0", | ||||||
|     "webpack-dashboard": "^2.0.0", |     "webpack-dashboard": "^2.0.0", | ||||||
|     "webpack-dev-server": "^3.1.5" |     "webpack-dev-server": "^3.1.7" | ||||||
|   }, |   }, | ||||||
|   "resolutions": { |   "resolutions": { | ||||||
|     "**/@types/react": "16.4.11", |     "**/@types/react": "16.4.11", | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								paths.js
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								paths.js
									
									
									
									
									
								
							| @ -19,6 +19,7 @@ function ensureSlash(p, needsSlash) { | |||||||
| exports.dotenv = resolveRoot(".env"); | exports.dotenv = resolveRoot(".env"); | ||||||
| exports.nodeModulesDir = resolveRoot("node_modules"); | exports.nodeModulesDir = resolveRoot("node_modules"); | ||||||
| exports.packageJson = resolveRoot("package.json"); | exports.packageJson = resolveRoot("package.json"); | ||||||
|  | exports.tslintConfig = resolveRoot("tslint.json"); | ||||||
| exports.publicUrl = ensureSlash(process.env.PUBLIC_URL || "http://localhost:8080/", true); | exports.publicUrl = ensureSlash(process.env.PUBLIC_URL || "http://localhost:8080/", true); | ||||||
| exports.publicPath = ensureSlash(url.parse(exports.publicUrl).pathname || "/", true); | exports.publicPath = ensureSlash(url.parse(exports.publicUrl).pathname || "/", true); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user