From 656fd60b2495780164357c322d298a5f93ed705e Mon Sep 17 00:00:00 2001 From: Jesse Chan Date: Sun, 23 Aug 2020 17:05:01 +0800 Subject: [PATCH] Enforce client, server isolation --- client/.eslintrc.js | 5 ++++- client/config/env.js | 2 +- client/config/webpack.config.dev.js | 2 +- client/config/webpack.config.prod.js | 2 +- client/config/webpackDevServer.config.js | 2 +- client/scripts/build.js | 2 +- client/scripts/start.js | 2 +- server/.eslintrc.js | 9 +++++++++ server/app.js | 2 +- {client => shared}/config/paths.js | 0 10 files changed, 20 insertions(+), 8 deletions(-) rename {client => shared}/config/paths.js (100%) diff --git a/client/.eslintrc.js b/client/.eslintrc.js index 78a217e7..6dbf8f0d 100644 --- a/client/.eslintrc.js +++ b/client/.eslintrc.js @@ -15,7 +15,10 @@ module.exports = { plugins: ['import'], rules: { "no-restricted-imports": ["error", { - "patterns": ["**/config"], + "patterns": ["**/config", "**/server/**/*"] + }], + "no-restricted-modules": ["error", { + "patterns": ["**/server/**/*"] }], '@typescript-eslint/no-var-requires': 0, '@typescript-eslint/camelcase': ['error'], diff --git a/client/config/env.js b/client/config/env.js index ada8cca8..d911837f 100644 --- a/client/config/env.js +++ b/client/config/env.js @@ -4,7 +4,7 @@ const path = require('path'); const userConfig = require('../../config'); // Make sure that including paths.js after env.js will read .env variables. -delete require.cache[require.resolve('./paths')]; +delete require.cache[require.resolve('../../shared/config/paths')]; // We support resolving modules according to `NODE_PATH`. // This lets you use absolute paths in imports inside large monorepos: diff --git a/client/config/webpack.config.dev.js b/client/config/webpack.config.dev.js index b8f9c280..f15cddee 100644 --- a/client/config/webpack.config.dev.js +++ b/client/config/webpack.config.dev.js @@ -8,7 +8,7 @@ const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); const eslintFormatter = require('react-dev-utils/eslintFormatter'); const getClientEnvironment = require('./env'); -const paths = require('./paths'); +const paths = require('../../shared/config/paths'); const env = getClientEnvironment(); diff --git a/client/config/webpack.config.prod.js b/client/config/webpack.config.prod.js index 95263d02..825d390b 100644 --- a/client/config/webpack.config.prod.js +++ b/client/config/webpack.config.prod.js @@ -6,7 +6,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); const ManifestPlugin = require('webpack-manifest-plugin'); const getClientEnvironment = require('./env'); -const paths = require('./paths'); +const paths = require('../../shared/config/paths'); const env = getClientEnvironment(); diff --git a/client/config/webpackDevServer.config.js b/client/config/webpackDevServer.config.js index 2bde6229..0e473eb1 100644 --- a/client/config/webpackDevServer.config.js +++ b/client/config/webpackDevServer.config.js @@ -1,6 +1,6 @@ const errorOverlayMiddleware = require('react-dev-utils/errorOverlayMiddleware'); const config = require('./webpack.config.dev'); -const paths = require('./paths'); +const paths = require('../../shared/config/paths'); const protocol = process.env.HTTPS === 'true' ? 'https' : 'http'; const host = process.env.HOST || '0.0.0.0'; diff --git a/client/scripts/build.js b/client/scripts/build.js index e30c8c18..0aacfd18 100644 --- a/client/scripts/build.js +++ b/client/scripts/build.js @@ -18,7 +18,7 @@ const webpack = require('webpack'); const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); const FileSizeReporter = require('react-dev-utils/FileSizeReporter'); -const paths = require('../config/paths'); +const paths = require('../../shared/config/paths'); const config = require('../config/webpack.config.prod'); const {measureFileSizesBeforeBuild, printFileSizesAfterBuild} = FileSizeReporter; diff --git a/client/scripts/start.js b/client/scripts/start.js index 78f75717..c15d06b2 100644 --- a/client/scripts/start.js +++ b/client/scripts/start.js @@ -19,7 +19,7 @@ const clearConsole = require('react-dev-utils/clearConsole'); const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); const {choosePort, createCompiler, prepareProxy, prepareUrls} = require('react-dev-utils/WebpackDevServerUtils'); const openBrowser = require('react-dev-utils/openBrowser'); -const paths = require('../config/paths'); +const paths = require('../../shared/config/paths'); const config = require('../config/webpack.config.dev'); const createDevServerConfig = require('../config/webpackDevServer.config'); diff --git a/server/.eslintrc.js b/server/.eslintrc.js index 331daec2..59dcd275 100644 --- a/server/.eslintrc.js +++ b/server/.eslintrc.js @@ -3,4 +3,13 @@ module.exports = { browser: 0, node: 1, }, + + rules: { + "no-restricted-imports": ["error", { + "patterns": ["**/client/**/*"] + }], + "no-restricted-modules": ["error", { + "patterns": ["**/client/**/*"] + }], + }, }; diff --git a/server/app.js b/server/app.js index 996cb496..e327c637 100644 --- a/server/app.js +++ b/server/app.js @@ -11,7 +11,7 @@ const path = require('path'); const app = express(); const apiRoutes = require('./routes/api'); const authRoutes = require('./routes/auth'); -const paths = require('../client/config/paths'); +const paths = require('../shared/config/paths'); const Users = require('./models/Users'); Users.bootstrapServicesForAllUsers(); diff --git a/client/config/paths.js b/shared/config/paths.js similarity index 100% rename from client/config/paths.js rename to shared/config/paths.js