From 7cd765e2cc80f2212ccf757dc3681b97c4b5d216 Mon Sep 17 00:00:00 2001 From: AllenFang Date: Sun, 14 May 2017 18:25:46 +0800 Subject: [PATCH] initial commits for react and redux scratch application --- config/env.js | 38 ++++ config/jest/cssTransform.js | 14 ++ config/jest/fileTransform.js | 12 ++ config/paths.js | 80 +++++++++ config/polyfills.js | 16 ++ config/webpack.config.dev.js | 211 +++++++++++++++++++++++ config/webpack.config.prod.js | 245 ++++++++++++++++++++++++++ package.json | 91 +++++++++- public-react/favicon.ico | Bin 0 -> 24838 bytes public-react/index.html | 31 ++++ scripts/build.js | 158 +++++++++++++++++ scripts/start.js | 316 ++++++++++++++++++++++++++++++++++ scripts/test.js | 21 +++ src-react/App.css | 24 +++ src-react/App.js | 21 +++ src-react/App.test.js | 8 + src-react/index.css | 5 + src-react/index.js | 9 + src-react/logo.svg | 7 + 19 files changed, 1300 insertions(+), 7 deletions(-) create mode 100644 config/env.js create mode 100644 config/jest/cssTransform.js create mode 100644 config/jest/fileTransform.js create mode 100644 config/paths.js create mode 100644 config/polyfills.js create mode 100644 config/webpack.config.dev.js create mode 100644 config/webpack.config.prod.js create mode 100644 public-react/favicon.ico create mode 100644 public-react/index.html create mode 100644 scripts/build.js create mode 100644 scripts/start.js create mode 100644 scripts/test.js create mode 100644 src-react/App.css create mode 100644 src-react/App.js create mode 100644 src-react/App.test.js create mode 100644 src-react/index.css create mode 100644 src-react/index.js create mode 100644 src-react/logo.svg diff --git a/config/env.js b/config/env.js new file mode 100644 index 0000000..58a4b65 --- /dev/null +++ b/config/env.js @@ -0,0 +1,38 @@ +'use strict'; + +// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be +// injected into the application via DefinePlugin in Webpack configuration. + +var REACT_APP = /^REACT_APP_/i; + +function getClientEnvironment(publicUrl) { + var raw = Object + .keys(process.env) + .filter(key => REACT_APP.test(key)) + .reduce((env, key) => { + env[key] = process.env[key]; + return env; + }, { + // Useful for determining whether we’re running in production mode. + // Most importantly, it switches React into the correct mode. + 'NODE_ENV': process.env.NODE_ENV || 'development', + // Useful for resolving the correct path to static assets in `public`. + // For example, . + // This should only be used as an escape hatch. Normally you would put + // images into the `src` and `import` them in code to get their paths. + 'PUBLIC_URL': publicUrl + }); + // Stringify all values so we can feed into Webpack DefinePlugin + var stringified = { + 'process.env': Object + .keys(raw) + .reduce((env, key) => { + env[key] = JSON.stringify(raw[key]); + return env; + }, {}) + }; + + return { raw, stringified }; +} + +module.exports = getClientEnvironment; diff --git a/config/jest/cssTransform.js b/config/jest/cssTransform.js new file mode 100644 index 0000000..f1534f6 --- /dev/null +++ b/config/jest/cssTransform.js @@ -0,0 +1,14 @@ +'use strict'; + +// This is a custom Jest transformer turning style imports into empty objects. +// http://facebook.github.io/jest/docs/tutorial-webpack.html + +module.exports = { + process() { + return 'module.exports = {};'; + }, + getCacheKey() { + // The output is always the same. + return 'cssTransform'; + }, +}; diff --git a/config/jest/fileTransform.js b/config/jest/fileTransform.js new file mode 100644 index 0000000..d1cc3b2 --- /dev/null +++ b/config/jest/fileTransform.js @@ -0,0 +1,12 @@ +'use strict'; + +const path = require('path'); + +// This is a custom Jest transformer turning file imports into filenames. +// http://facebook.github.io/jest/docs/tutorial-webpack.html + +module.exports = { + process(src, filename) { + return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';'; + }, +}; diff --git a/config/paths.js b/config/paths.js new file mode 100644 index 0000000..5b86378 --- /dev/null +++ b/config/paths.js @@ -0,0 +1,80 @@ +'use strict'; + +var path = require('path'); +var fs = require('fs'); +var url = require('url'); + +// Make sure any symlinks in the project folder are resolved: +// https://github.com/facebookincubator/create-react-app/issues/637 +var appDirectory = fs.realpathSync(process.cwd()); +function resolveApp(relativePath) { + return path.resolve(appDirectory, relativePath); +} + +// We support resolving modules according to `NODE_PATH`. +// This lets you use absolute paths in imports inside large monorepos: +// https://github.com/facebookincubator/create-react-app/issues/253. + +// It works similar to `NODE_PATH` in Node itself: +// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders + +// We will export `nodePaths` as an array of absolute paths. +// It will then be used by Webpack configs. +// Jest doesn’t need this because it already handles `NODE_PATH` out of the box. + +// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored. +// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims. +// https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421 + +var nodePaths = (process.env.NODE_PATH || '') + .split(process.platform === 'win32' ? ';' : ':') + .filter(Boolean) + .filter(folder => !path.isAbsolute(folder)) + .map(resolveApp); + +var envPublicUrl = process.env.PUBLIC_URL; + +function ensureSlash(path, needsSlash) { + var hasSlash = path.endsWith('/'); + if (hasSlash && !needsSlash) { + return path.substr(path, path.length - 1); + } else if (!hasSlash && needsSlash) { + return path + '/'; + } else { + return path; + } +} + +function getPublicUrl(appPackageJson) { + return envPublicUrl || require(appPackageJson).homepage; +} + +// We use `PUBLIC_URL` environment variable or "homepage" field to infer +// "public path" at which the app is served. +// Webpack needs to know it to put the right