Skip to content
This repository was archived by the owner on Jun 10, 2019. It is now read-only.

Commit 5d263cb

Browse files
alexspencerickr
authored andcommitted
Update CRA Scripts. Add ability to have global css bypassing css modules.
1 parent 4199443 commit 5d263cb

14 files changed

Lines changed: 2299 additions & 2341 deletions

.eslintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"import/extensions": 0,
1616
"import/no-extraneous-dependencies": 0,
1717
"linebreak-style": 0,
18-
"max-len": 0
18+
"max-len": 0,
19+
"react/jsx-max-props-per-line": 0
1920
},
2021
"settings": {
2122
"import/resolver": {

config/env.js

Lines changed: 76 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,86 @@
1-
'use strict';
1+
2+
3+
const fs = require('fs');
4+
const path = require('path');
5+
const paths = require('./paths');
6+
7+
// Make sure that including paths.js after env.js will read .env variables.
8+
delete require.cache[require.resolve('./paths')];
9+
10+
let NODE_ENV = process.env.NODE_ENV;
11+
if (!NODE_ENV) {
12+
process.env.NODE_ENV = 'development';
13+
NODE_ENV = 'development';
14+
}
15+
16+
// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
17+
var dotenvFiles = [
18+
`${paths.dotenv}.${NODE_ENV}.local`,
19+
`${paths.dotenv}.${NODE_ENV}`,
20+
// Don't include `.env.local` for `test` environment
21+
// since normally you expect tests to produce the same
22+
// results for everyone
23+
NODE_ENV !== 'test' && `${paths.dotenv}.local`,
24+
paths.dotenv
25+
].filter(Boolean);
26+
27+
// Load environment variables from .env* files. Suppress warnings using silent
28+
// if this file is missing. dotenv will never modify any environment variables
29+
// that have already been set.
30+
// https://github.com/motdotla/dotenv
31+
dotenvFiles.forEach((dotenvFile) => {
32+
if (fs.existsSync(dotenvFile)) {
33+
require('dotenv').config({
34+
path: dotenvFile
35+
});
36+
}
37+
});
38+
39+
// We support resolving modules according to `NODE_PATH`.
40+
// This lets you use absolute paths in imports inside large monorepos:
41+
// https://github.com/facebookincubator/create-react-app/issues/253.
42+
// It works similar to `NODE_PATH` in Node itself:
43+
// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
44+
// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
45+
// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
46+
// https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421
47+
// We also resolve them to make sure all tools using them work consistently.
48+
const appDirectory = fs.realpathSync(process.cwd());
49+
process.env.NODE_PATH = (process.env.NODE_PATH || '')
50+
.split(path.delimiter)
51+
.filter(folder => folder && !path.isAbsolute(folder))
52+
.map(folder => path.resolve(appDirectory, folder))
53+
.join(path.delimiter);
254

355
// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
456
// injected into the application via DefinePlugin in Webpack configuration.
5-
6-
var REACT_APP = /^REACT_APP_/i;
57+
const REACT_APP = /^REACT_APP_/i;
758

859
function getClientEnvironment(publicUrl) {
9-
var raw = Object
10-
.keys(process.env)
60+
const raw = Object.keys(process.env)
1161
.filter(key => REACT_APP.test(key))
12-
.reduce((env, key) => {
13-
env[key] = process.env[key];
14-
return env;
15-
}, {
16-
// Useful for determining whether we’re running in production mode.
17-
// Most importantly, it switches React into the correct mode.
18-
'NODE_ENV': process.env.NODE_ENV || 'development',
19-
// Useful for resolving the correct path to static assets in `public`.
20-
// For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.
21-
// This should only be used as an escape hatch. Normally you would put
22-
// images into the `src` and `import` them in code to get their paths.
23-
'PUBLIC_URL': publicUrl
24-
});
25-
// Stringify all values so we can feed into Webpack DefinePlugin
26-
var stringified = {
27-
'process.env': Object
28-
.keys(raw)
29-
.reduce((env, key) => {
30-
env[key] = JSON.stringify(raw[key]);
62+
.reduce(
63+
(env, key) => {
64+
env[key] = process.env[key];
3165
return env;
32-
}, {})
66+
},
67+
{
68+
// Useful for determining whether we’re running in production mode.
69+
// Most importantly, it switches React into the correct mode.
70+
NODE_ENV: process.env.NODE_ENV || 'development',
71+
// Useful for resolving the correct path to static assets in `public`.
72+
// For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.
73+
// This should only be used as an escape hatch. Normally you would put
74+
// images into the `src` and `import` them in code to get their paths.
75+
PUBLIC_URL: publicUrl
76+
}
77+
);
78+
// Stringify all values so we can feed into Webpack DefinePlugin
79+
const stringified = {
80+
'process.env': Object.keys(raw).reduce((env, key) => {
81+
env[key] = JSON.stringify(raw[key]);
82+
return env;
83+
}, {})
3384
};
3485

3586
return { raw, stringified };

config/jest/cssTransform.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
'use strict';
1+
22

33
// This is a custom Jest transformer turning style imports into empty objects.
44
// http://facebook.github.io/jest/docs/tutorial-webpack.html
@@ -10,5 +10,5 @@ module.exports = {
1010
getCacheKey() {
1111
// The output is always the same.
1212
return 'cssTransform';
13-
},
13+
}
1414
};

config/jest/fileTransform.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
'use strict';
1+
22

33
const path = require('path');
44

@@ -7,6 +7,6 @@ const path = require('path');
77

88
module.exports = {
99
process(src, filename) {
10-
return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';';
11-
},
10+
return `module.exports = ${JSON.stringify(path.basename(filename))};`;
11+
}
1212
};

config/paths.js

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,28 @@
1-
'use strict';
21

3-
var path = require('path');
4-
var fs = require('fs');
5-
var url = require('url');
2+
3+
const path = require('path');
4+
const fs = require('fs');
5+
const url = require('url');
66

77
// Make sure any symlinks in the project folder are resolved:
88
// https://github.com/facebookincubator/create-react-app/issues/637
9-
var appDirectory = fs.realpathSync(process.cwd());
10-
function resolveApp(relativePath) {
11-
return path.resolve(appDirectory, relativePath);
12-
}
13-
14-
// We support resolving modules according to `NODE_PATH`.
15-
// This lets you use absolute paths in imports inside large monorepos:
16-
// https://github.com/facebookincubator/create-react-app/issues/253.
17-
18-
// It works similar to `NODE_PATH` in Node itself:
19-
// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
9+
const appDirectory = fs.realpathSync(process.cwd());
10+
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
2011

21-
// We will export `nodePaths` as an array of absolute paths.
22-
// It will then be used by Webpack configs.
23-
// Jest doesn’t need this because it already handles `NODE_PATH` out of the box.
24-
25-
// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
26-
// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
27-
// https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421
28-
29-
var nodePaths = (process.env.NODE_PATH || '')
30-
.split(process.platform === 'win32' ? ';' : ':')
31-
.filter(Boolean)
32-
.filter(folder => !path.isAbsolute(folder))
33-
.map(resolveApp);
34-
35-
var envPublicUrl = process.env.PUBLIC_URL;
12+
const envPublicUrl = process.env.PUBLIC_URL;
3613

3714
function ensureSlash(path, needsSlash) {
38-
var hasSlash = path.endsWith('/');
15+
const hasSlash = path.endsWith('/');
3916
if (hasSlash && !needsSlash) {
4017
return path.substr(path, path.length - 1);
4118
} else if (!hasSlash && needsSlash) {
42-
return path + '/';
43-
} else {
44-
return path;
19+
return `${path}/`;
4520
}
21+
return path;
4622
}
4723

48-
function getPublicUrl(appPackageJson) {
49-
return envPublicUrl || require(appPackageJson).homepage;
50-
}
24+
const getPublicUrl = appPackageJson =>
25+
envPublicUrl || require(appPackageJson).homepage;
5126

5227
// We use `PUBLIC_URL` environment variable or "homepage" field to infer
5328
// "public path" at which the app is served.
@@ -56,15 +31,15 @@ function getPublicUrl(appPackageJson) {
5631
// We can't use a relative path in HTML because we don't want to load something
5732
// like /todos/42/static/js/bundle.7289d.js. We have to know the root.
5833
function getServedPath(appPackageJson) {
59-
var publicUrl = getPublicUrl(appPackageJson);
60-
var servedUrl = envPublicUrl || (
61-
publicUrl ? url.parse(publicUrl).pathname : '/'
62-
);
34+
const publicUrl = getPublicUrl(appPackageJson);
35+
const servedUrl =
36+
envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : '/');
6337
return ensureSlash(servedUrl, true);
6438
}
6539

6640
// config after eject: we're in ./config/
6741
module.exports = {
42+
dotenv: resolveApp('.env'),
6843
appBuild: resolveApp('build'),
6944
appPublic: resolveApp('public'),
7045
appHtml: resolveApp('public/index.html'),
@@ -74,7 +49,6 @@ module.exports = {
7449
yarnLockFile: resolveApp('yarn.lock'),
7550
testsSetup: resolveApp('src/setupTests.js'),
7651
appNodeModules: resolveApp('node_modules'),
77-
nodePaths: nodePaths,
7852
publicUrl: getPublicUrl(resolveApp('package.json')),
7953
servedPath: getServedPath(resolveApp('package.json'))
8054
};

config/polyfills.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
'use strict';
1+
22

33
if (typeof Promise === 'undefined') {
44
// Rejection tracking prevents a common issue where React gets into an

0 commit comments

Comments
 (0)