diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js
index 17446b8c..914c0ce7 100644
--- a/config/webpack.config.dev.js
+++ b/config/webpack.config.dev.js
@@ -1,24 +1,26 @@
-'use strict';
+"use strict";
-const autoprefixer = require('autoprefixer');
-const path = require('path');
-const webpack = require('webpack');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
-const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin');
-const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin');
-const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
-const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
-const getClientEnvironment = require('./env');
-const paths = require('./paths');
+const autoprefixer = require("autoprefixer");
+const path = require("path");
+const webpack = require("webpack");
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const CaseSensitivePathsPlugin = require("case-sensitive-paths-webpack-plugin");
+const InterpolateHtmlPlugin = require("react-dev-utils/InterpolateHtmlPlugin");
+const WatchMissingNodeModulesPlugin = require("react-dev-utils/WatchMissingNodeModulesPlugin");
+const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin");
+const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");
-const publicPath = '/';
-const env = getClientEnvironment('/');
+const getClientEnvironment = require("./env");
+
+const paths = require("./paths");
+
+const publicPath = "/";
+const env = getClientEnvironment("/");
module.exports = {
optimization: {
splitChunks: {
- chunks: 'async',
+ chunks: "async",
// 大于30KB才单独分离成chunk
minSize: 30000,
maxAsyncRequests: 5,
@@ -30,24 +32,24 @@ module.exports = {
reuseExistingChunk: true,
},
vendors: {
- name: 'vendors',
+ name: "vendors",
test: /[\\/]node_modules[\\/]/,
priority: -10,
- chunks: "all"
- }
- }
+ chunks: "all",
+ },
+ },
},
- runtimeChunk: true
+ runtimeChunk: true,
},
- mode: 'development',
+ mode: "development",
// 开启调试
- devtool: "source-map", // 开启调试
+ devtool: "source-map", // 开启调试
// These are the "entry points" to our application.
// This means they will be the "root" imports that are included in JS bundle.
// The first two entry points enable "hot" CSS and auto-refreshes for JS.
entry: [
// We ship a few polyfills by default:
- require.resolve('./polyfills'),
+ require.resolve("./polyfills"),
// Include an alternative client for WebpackDevServer. A client's job is to
// connect to WebpackDevServer by a socket and get notified about changes.
// When you save a file, the client will either apply hot updates (in case
@@ -58,7 +60,7 @@ module.exports = {
// the line below with these two lines if you prefer the stock client:
// require.resolve('webpack-dev-server/client') + '?/',
// require.resolve('webpack/hot/dev-server'),
- require.resolve('react-dev-utils/webpackHotDevClient'),
+ require.resolve("react-dev-utils/webpackHotDevClient"),
// Finally, this is your app's code:
paths.appIndexJs,
// We include the app code last so that if there is a runtime error during
@@ -68,25 +70,25 @@ module.exports = {
output: {
// Add /* filename */ comments to generated require()s in the output.
pathinfo: true,
- globalObject: 'this',
+ globalObject: "this",
// This does not produce a real file. It's just the virtual path that is
// served by WebpackDevServer in development. This is the JS bundle
// containing code from all our entry points, and the Webpack runtime.
- filename: 'static/js/bundle.js',
+ filename: "static/js/bundle.js",
// There are also additional JS chunk files if you use code splitting.
- chunkFilename: 'static/js/[name].chunk.js',
+ chunkFilename: "static/js/[name].chunk.js",
// This is the URL that app is served from. We use "/" in development.
publicPath,
// Point sourcemap entries to original disk location (format as URL on Windows)
- devtoolModuleFilenameTemplate: info =>
- path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'),
+ devtoolModuleFilenameTemplate: (info) =>
+ path.resolve(info.absoluteResourcePath).replace(/\\/g, "/"),
},
resolve: {
// This allows you to set a fallback for where Webpack should look for modules.
// We placed these paths second because we want `node_modules` to "win"
// if there are any conflicts. This matches Node resolution mechanism.
// https://github.com/facebookincubator/create-react-app/issues/253
- modules: ['node_modules', paths.appNodeModules].concat(
+ modules: ["node_modules", paths.appNodeModules].concat(
// It is guaranteed to exist because we tweak it in `env.js`
process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
),
@@ -96,13 +98,12 @@ module.exports = {
// https://github.com/facebookincubator/create-react-app/issues/290
// `web` extension prefixes have been added for better support
// for React Native Web.
- extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx'],
+ extensions: [".web.js", ".mjs", ".js", ".json", ".web.jsx", ".jsx"],
alias: {
-
- "educoder": __dirname + "/../src/common/educoder.js",
+ educoder: __dirname + "/../src/common/educoder.js",
// Support React Native Web
// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
- 'react-native': 'react-native-web',
+ "react-native": "react-native-web",
},
plugins: [
// Prevents users from importing files from outside of src/ (or node_modules/).
@@ -126,10 +127,10 @@ module.exports = {
// A missing `test` is equivalent to a match.
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
- loader: require.resolve('url-loader'),
+ loader: require.resolve("url-loader"),
options: {
limit: 10000,
- name: 'static/media/[name].[hash:8].[ext]',
+ name: "static/media/[name].[hash:8].[ext]",
},
},
// Process JS with Babel.
@@ -137,19 +138,22 @@ module.exports = {
test: /\.(js|jsx|mjs)$/,
include: paths.appSrc,
exclude: /node_modules/,
- loader: require.resolve('babel-loader'),
+ loader: require.resolve("babel-loader"),
options: {
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true,
- "plugins": [
- ["import", {
- "libraryName": "antd",
- "libraryDirectory": "es",
- "style": "css"
- }]
- ]
+ plugins: [
+ [
+ "import",
+ {
+ libraryName: "antd",
+ libraryDirectory: "es",
+ style: "css",
+ },
+ ],
+ ],
},
},
// "postcss" loader applies autoprefixer to our CSS.
@@ -160,29 +164,29 @@ module.exports = {
{
test: /\.css$/,
use: [
- require.resolve('style-loader'),
+ require.resolve("style-loader"),
{
- loader: require.resolve('css-loader'),
+ loader: require.resolve("css-loader"),
options: {
importLoaders: 1,
},
},
{
- loader: require.resolve('postcss-loader'),
+ loader: require.resolve("postcss-loader"),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebookincubator/create-react-app/issues/2677
- ident: 'postcss',
+ ident: "postcss",
plugins: () => [
- require('postcss-flexbugs-fixes'),
+ require("postcss-flexbugs-fixes"),
autoprefixer({
browsers: [
- '>1%',
- 'last 4 versions',
- 'Firefox ESR',
- 'not ie < 9', // React doesn't support IE8 anyway
+ ">1%",
+ "last 4 versions",
+ "Firefox ESR",
+ "not ie < 9", // React doesn't support IE8 anyway
],
- flexbox: 'no-2009',
+ flexbox: "no-2009",
}),
],
},
@@ -192,7 +196,7 @@ module.exports = {
{
test: /\.scss$/,
use: [
- require.resolve('style-loader'),
+ require.resolve("style-loader"),
{
loader: require.resolve("css-loader"),
options: {
@@ -200,8 +204,8 @@ module.exports = {
},
},
{
- loader: require.resolve("sass-loader")
- }
+ loader: require.resolve("sass-loader"),
+ },
],
},
// "file" loader makes sure those assets get served by WebpackDevServer.
@@ -215,9 +219,9 @@ module.exports = {
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/],
- loader: require.resolve('file-loader'),
+ loader: require.resolve("file-loader"),
options: {
- name: 'static/media/[name].[hash:8].[ext]',
+ name: "static/media/[name].[hash:8].[ext]",
},
},
],
@@ -261,17 +265,18 @@ module.exports = {
// You can remove this if you don't use Moment.js:
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
new MonacoWebpackPlugin({
- features: ['!gotoSymbol'],
- })
+ features: ["coreCommands", "find"],
+ languages: ['plaintext','apex', 'azcli', 'bat', 'clojure', 'coffee', 'cpp', 'csharp', 'csp', 'css', 'dockerfile', 'fsharp', 'go', 'handlebars', 'html', 'ini', 'java', 'javascript', 'json', 'less', 'lua', 'markdown', 'msdax', 'mysql', 'objective', 'perl', 'pgsql', 'php', 'postiats', 'powerquery', 'powershell', 'pug', 'python', 'r', 'razor', 'redis', 'redshift', 'ruby', 'rust', 'sb', 'scheme', 'scss', 'shell', 'solidity', 'sql', 'st', 'swift', 'typescript', 'vb', 'xml', 'yaml']
+ }),
],
// Some libraries import Node modules but don't use them in the browser.
// Tell Webpack to provide empty mocks for them so importing them works.
node: {
- dgram: 'empty',
- fs: 'empty',
- net: 'empty',
- tls: 'empty',
- child_process: 'empty',
+ dgram: "empty",
+ fs: "empty",
+ net: "empty",
+ tls: "empty",
+ child_process: "empty",
},
// Turn off performance hints during development because we don't do any
// splitting or minification in interest of speed. These warnings become
diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js
index 1fc0f0ca..838da647 100644
--- a/config/webpack.config.prod.js
+++ b/config/webpack.config.prod.js
@@ -1,25 +1,25 @@
-'use strict';
-const autoprefixer = require('autoprefixer');
-const path = require('path');
-const webpack = require('webpack');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const ManifestPlugin = require('webpack-manifest-plugin');
-const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin');
-const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
-const eslintFormatter = require('react-dev-utils/eslintFormatter');
-const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
-const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
+"use strict";
+const autoprefixer = require("autoprefixer");
+const path = require("path");
+const webpack = require("webpack");
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
+const ManifestPlugin = require("webpack-manifest-plugin");
+const InterpolateHtmlPlugin = require("react-dev-utils/InterpolateHtmlPlugin");
+const SWPrecacheWebpackPlugin = require("sw-precache-webpack-plugin");
+const eslintFormatter = require("react-dev-utils/eslintFormatter");
+const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin");
+const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");
-const TerserJSPlugin = require('terser-webpack-plugin');
-const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
+const TerserJSPlugin = require("terser-webpack-plugin");
+const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
-const paths = require('./paths');
-const getClientEnvironment = require('./env');
+const paths = require("./paths");
+const getClientEnvironment = require("./env");
// Some apps do not use client-side routing with pushState.
// For these, "homepage" can be set to "." to enable relative asset paths.
-let publicPath = '/react/build/';
+let publicPath = "/react/build/";
// let nodeEnv = process.env.NODE_ENV
// if (nodeEnv === 'testBuild') {
// publicPath = 'https://testforgeplus.trustie.net/react/build/';
@@ -28,7 +28,7 @@ let publicPath = '/react/build/';
// publicPath = 'https://forgeplus.trustie.net/react/build/';
// }
const publicUrl = publicPath.slice(0, -1);
-const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false';
+const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== "false";
const env = getClientEnvironment(publicPath);
// This is the production configuration.
@@ -36,296 +36,301 @@ const env = getClientEnvironment(publicPath);
// The development configuration is different and lives in a separate file.
// 上线用的
module.exports = {
- optimization: {
- minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
- splitChunks: {
- chunks: 'async',
- // 大于30KB才单独分离成chunk
- minSize: 30000,
- maxAsyncRequests: 5,
- maxInitialRequests: 3,
- name: true,
- cacheGroups: {
- default: {
- minChunks: 2,
- priority: -20,
- reuseExistingChunk: true,
- },
- // vendors: {
- // name: 'vendors',
- // test: /[\\/]node_modules[\\/]/,
- // priority: -10,
- // chunks: "all"
- // }
- }
- },
- runtimeChunk: true
- },
- bail: true,
- mode: 'production',
- devtool: false,//测试版
- entry: [require.resolve('./polyfills'), paths.appIndexJs],
- output: {
- path: paths.appBuild,
- globalObject: 'this',
- filename: './static/js/[name].[contenthash:8].js',
- chunkFilename: './static/js/[name].[contenthash:8].chunk.js',
- publicPath,
+ optimization: {
+ minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
+ splitChunks: {
+ chunks: "async",
+ // 大于30KB才单独分离成chunk
+ minSize: 30000,
+ maxAsyncRequests: 5,
+ maxInitialRequests: 3,
+ name: true,
+ cacheGroups: {
+ default: {
+ minChunks: 2,
+ priority: -20,
+ reuseExistingChunk: true,
+ },
+ // vendors: {
+ // name: 'vendors',
+ // test: /[\\/]node_modules[\\/]/,
+ // priority: -10,
+ // chunks: "all"
+ // }
+ },
+ },
+ runtimeChunk: true,
+ },
+ bail: true,
+ mode: "production",
+ devtool: false, //测试版
+ entry: [require.resolve("./polyfills"), paths.appIndexJs],
+ output: {
+ path: paths.appBuild,
+ globalObject: "this",
+ filename: "./static/js/[name].[contenthash:8].js",
+ chunkFilename: "./static/js/[name].[contenthash:8].chunk.js",
+ publicPath,
- // Point sourcemap entries to original disk location (format as URL on Windows)
- devtoolModuleFilenameTemplate: info =>
- path
- .relative(paths.appSrc, info.absoluteResourcePath)
- .replace(/\\/g, '/'),
- },
- resolve: {
- // This allows you to set a fallback for where Webpack should look for modules.
- // We placed these paths second because we want `node_modules` to "win"
- // if there are any conflicts. This matches Node resolution mechanism.
- // https://github.com/facebookincubator/create-react-app/issues/253
- modules: ['node_modules', paths.appNodeModules].concat(
- // It is guaranteed to exist because we tweak it in `env.js`
- process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
- ),
- // These are the reasonable defaults supported by the Node ecosystem.
- // We also include JSX as a common component filename extension to support
- // some tools, although we do not recommend using it, see:
- // https://github.com/facebookincubator/create-react-app/issues/290
- // `web` extension prefixes have been added for better support
- // for React Native Web.
- extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx'],
- alias: {
- "educoder": __dirname + "/../src/common/educoder.js",
- // Support React Native Web
- // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
- 'react-native': 'react-native-web',
- },
- plugins: [
- // Prevents users from importing files from outside of src/ (or node_modules/).
- // This often causes confusion because we only process files within src/ with babel.
- // To fix this, we prevent you from importing files out of src/ -- if you'd like to,
- // please link the files into your node_modules/ and let module-resolution kick in.
- // Make sure your source files are compiled, as they will not be processed in any way.
- new ModuleScopePlugin(paths.appSrc, [paths.appPackageJson]),
- ],
- },
- module: {
- strictExportPresence: true,
- rules: [
- {
- test: /\.(js|jsx|mjs)$/,
- enforce: 'pre',
- use: [
- {
- options: {
- formatter: eslintFormatter,
- eslintPath: require.resolve('eslint'),
+ // Point sourcemap entries to original disk location (format as URL on Windows)
+ devtoolModuleFilenameTemplate: (info) =>
+ path
+ .relative(paths.appSrc, info.absoluteResourcePath)
+ .replace(/\\/g, "/"),
+ },
+ resolve: {
+ // This allows you to set a fallback for where Webpack should look for modules.
+ // We placed these paths second because we want `node_modules` to "win"
+ // if there are any conflicts. This matches Node resolution mechanism.
+ // https://github.com/facebookincubator/create-react-app/issues/253
+ modules: ["node_modules", paths.appNodeModules].concat(
+ // It is guaranteed to exist because we tweak it in `env.js`
+ process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
+ ),
+ // These are the reasonable defaults supported by the Node ecosystem.
+ // We also include JSX as a common component filename extension to support
+ // some tools, although we do not recommend using it, see:
+ // https://github.com/facebookincubator/create-react-app/issues/290
+ // `web` extension prefixes have been added for better support
+ // for React Native Web.
+ extensions: [".web.js", ".mjs", ".js", ".json", ".web.jsx", ".jsx"],
+ alias: {
+ educoder: __dirname + "/../src/common/educoder.js",
+ // Support React Native Web
+ // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
+ "react-native": "react-native-web",
+ },
+ plugins: [
+ // Prevents users from importing files from outside of src/ (or node_modules/).
+ // This often causes confusion because we only process files within src/ with babel.
+ // To fix this, we prevent you from importing files out of src/ -- if you'd like to,
+ // please link the files into your node_modules/ and let module-resolution kick in.
+ // Make sure your source files are compiled, as they will not be processed in any way.
+ new ModuleScopePlugin(paths.appSrc, [paths.appPackageJson]),
+ ],
+ },
+ module: {
+ strictExportPresence: true,
+ rules: [
+ {
+ test: /\.(js|jsx|mjs)$/,
+ enforce: "pre",
+ use: [
+ {
+ options: {
+ formatter: eslintFormatter,
+ eslintPath: require.resolve("eslint"),
+ },
+ loader: require.resolve("eslint-loader"),
+ },
+ ],
+ include: paths.appSrc,
+ },
+ {
+ // "oneOf" will traverse all following loaders until one will
+ // match the requirements. When no loader matches it will fall
+ // back to the "file" loader at the end of the loader list.
+ oneOf: [
+ // "url" loader works just like "file" loader but it also embeds
+ // assets smaller than specified size as data URLs to avoid requests.
+ {
+ test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
+ loader: require.resolve("url-loader"),
+ options: {
+ limit: 10000,
+ name: "static/media/[name].[hash:8].[ext]",
+ },
+ },
+ // Process JS with Babel.
+ {
+ test: /\.(js|jsx|mjs)$/,
+ include: paths.appSrc,
+ exclude: /node_modules/,
+ loader: require.resolve("babel-loader"),
+ options: {
+ compact: true,
+ plugins: [
+ [
+ "import",
+ {
+ libraryName: "antd",
+ libraryDirectory: "es",
+ style: "css",
+ },
+ ],
+ ],
+ },
+ },
- },
- loader: require.resolve('eslint-loader'),
- },
- ],
- include: paths.appSrc,
- },
- {
- // "oneOf" will traverse all following loaders until one will
- // match the requirements. When no loader matches it will fall
- // back to the "file" loader at the end of the loader list.
- oneOf: [
- // "url" loader works just like "file" loader but it also embeds
- // assets smaller than specified size as data URLs to avoid requests.
- {
- test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
- loader: require.resolve('url-loader'),
- options: {
- limit: 10000,
- name: 'static/media/[name].[hash:8].[ext]',
- },
- },
- // Process JS with Babel.
- {
- test: /\.(js|jsx|mjs)$/,
- include: paths.appSrc,
- exclude: /node_modules/,
- loader: require.resolve('babel-loader'),
- options: {
- compact: true,
- "plugins": [
- ["import", {
- "libraryName": "antd",
- "libraryDirectory": "es",
- "style": "css"
- }]
- ]
- },
- },
+ {
+ test: /\.css$/,
- {
- test: /\.css$/,
+ use: [
+ {
+ loader: MiniCssExtractPlugin.loader,
+ options: {
+ publicPath,
+ },
+ },
+ {
+ loader: require.resolve("css-loader"),
+ options: {
+ importLoaders: 1,
+ sourceMap: shouldUseSourceMap,
+ },
+ },
+ {
+ loader: require.resolve("postcss-loader"),
+ options: {
+ ident: "postcss",
+ plugins: () => [
+ require("postcss-flexbugs-fixes"),
+ autoprefixer({
+ browsers: [
+ ">1%",
+ "last 4 versions",
+ "Firefox ESR",
+ "not ie < 9", // React doesn't support IE8 anyway
+ ],
+ flexbox: "no-2009",
+ }),
+ ],
+ },
+ },
+ ],
+ },
+ {
+ test: /\.scss$/,
+ use: [
+ {
+ loader: MiniCssExtractPlugin.loader,
+ options: {
+ publicPath,
+ },
+ },
+ {
+ loader: require.resolve("css-loader"),
+ options: {
+ importLoaders: 1,
+ sourceMap: shouldUseSourceMap,
+ },
+ },
+ {
+ loader: require.resolve("sass-loader"),
+ },
+ ],
+ },
+ // "file" loader makes sure assets end up in the `build` folder.
+ // When you `import` an asset, you get its filename.
+ // This loader doesn't use a "test" so it will catch all modules
+ // that fall through the other loaders.
+ {
+ loader: require.resolve("file-loader"),
+ // 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|jsx|mjs)$/, /\.html$/, /\.json$/],
+ options: {
+ name: "static/media/[name].[contenthash:8].[ext]",
+ },
+ },
+ // ** STOP ** Are you adding a new loader?
+ // Make sure to add the new loader(s) before the "file" loader.
+ ],
+ },
+ ],
+ },
+ plugins: [
+ // Makes some environment variables available in index.html.
+ // The public URL is available as %PUBLIC_URL% in index.html, e.g.:
+ //
+ // In production, it will be an empty string unless you specify "homepage"
+ // in `package.json`, in which case it will be the pathname of that URL.
+ // Generates an `index.html` file with the