diff --git a/.babelrc b/.babelrc
index 09f1f3e18..44f77b1aa 100644
--- a/.babelrc
+++ b/.babelrc
@@ -2,9 +2,20 @@
"presets": [
"env",
"react",
- "stage-2"
+ "stage-2",
+ "es2015"
],
- "plugins": [[
+ "plugins": [["antd", {
+ "libraryDirectory": "lib",
+ "libraryName": "antd"
+ }],[
+ "transform-imports",
+ {
+ "libraryName": "antd",
+ "libraryDirectory": "lib",
+ "camel2KebabCase": false
+ }
+ ],[
"transform-runtime",
{
"helpers": false,
@@ -12,5 +23,5 @@
"regenerator": true,
"moduleName": "babel-runtime"
}
- ],["transform-decorators-legacy"]]
+ ],["transform-decorators-legacy"], ["syntax-dynamic-import"], ["transform-class-properties"]]
}
\ No newline at end of file
diff --git a/config/paths.js b/config/paths.js
index eca9f3738..c116b362a 100644
--- a/config/paths.js
+++ b/config/paths.js
@@ -47,6 +47,7 @@ module.exports = {
appIndexJs: resolveApp('src/index.js'),
appPackageJson: resolveApp('package.json'),
appSrc: resolveApp('src'),
+ serverSrc: resolveApp('server'),
yarnLockFile: resolveApp('yarn.lock'),
testsSetup: resolveApp('src/setupTests.js'),
appNodeModules: resolveApp('node_modules'),
diff --git a/config/webpack.server.js b/config/webpack.server.js
index f250fa42e..75976f4b9 100644
--- a/config/webpack.server.js
+++ b/config/webpack.server.js
@@ -1,5 +1,25 @@
+const autoprefixer = require("autoprefixer");
const path = require("path");
-const nodeExternals = require("webpack-node-externals");
+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 TerserWebpackPlugin = require('terser-webpack-plugin');
+const paths = require("./paths");
+const getClientEnvironment = require("./env");
+
+let publicPath = "/react/buildserver/";
+// const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== "false";
+const shouldUseSourceMap = true;
+const env = getClientEnvironment(publicPath,'production.min');
+// const nodeExternals = require("webpack-node-externals");
const serverConfig = {
target:"node", //由于输出代码的运行环境是node,源码中依赖的node原生模块没必要打包进去;为了不把nodejs内置模块打包进输出文件中,例如: fs net模块等;
@@ -9,20 +29,242 @@ const serverConfig = {
filename:"bundle.js",
path: path.resolve(__dirname,"../buildserver")
},
- externals:[nodeExternals()], //为了不把node_modules目录下的第三方模块打包进输出文件中,因为nodejs默认会去node_modules目录下去寻找和使用第三方模块。
- module:{
- rules:[
+ // externals:[nodeExternals()], //为了不把node_modules目录下的第三方模块打包进输出文件中,因为nodejs默认会去node_modules目录下去寻找和使用第三方模块。
+ module: {
+ strictExportPresence: true,
+ rules: [
{
- test: /\.js$/,
- exclude: /node_modules/,
- loader: "babel-loader",
+ test: /\.(js|jsx|mjs)$/,
+ enforce: "pre",
+ use: [
+ {
+ options: {
+ formatter: eslintFormatter,
+ eslintPath: require.resolve("eslint"),
+ },
+ loader: require.resolve("eslint-loader"),
+ },
+ ],
+ include: [paths.appSrc, paths.serverSrc],
},
{
- test: /\.css$/,
- use: ['style-loader', 'css-loader'],
+ // "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]",
+ },
+ },
+ {
+ test: /\.(js|jsx|mjs)$/,
+ include: [paths.appSrc, paths.serverSrc],
+ exclude: /node_modules/,
+ loader: require.resolve("babel-loader"),
+ options: {
+ compact: true,
+ plugins: [
+ [
+ "import",
+ {
+ libraryName: "antd",
+ libraryDirectory: "es",
+ style: true,
+ },
+ ],
+ ],
+ },
+ },
+ {
+ 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"),
+ },
+ {
+ loader: 'sass-resources-loader',
+ options: {
+ resources: ['src/global.scss']
+ }
+ }
+ ],
+ },
+ {
+ test: /\.less$/,
+ use: [{
+ loader: 'isomorphic-style-loader',
+ }, {
+ loader: 'css-loader', // translates CSS into CommonJS
+ }, {
+ loader: 'less-loader', // compiles Less to CSS
+ options: {
+ modifyVars: {
+ 'primary-color': '#466aff',
+ 'link-color': '#466aff',
+ },
+ javascriptEnabled: true,
+ },
+ }]
+ },
+ // "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