Commit d6dbfc03 authored by Dan Abramov's avatar Dan Abramov Committed by GitHub
Browse files

Support hoisting react-scripts and add require.resolve() to loaders (#2166)

* Support hoisting react-scripts

* require.resolve() loaders and configs

This makes it so that loaders and configs are resolved relative to the config rather than to the app. This seems to make more sense to me.
parent 814365b4
3 merge requests!12191Lim.Pisey.168:/Identified - We are currently investigating reports of missing build logs. The issue has been identified and a resolution is in progress. We will provide a further update when available.Mar 21, 09:02 UTC,!12853brikk,!5717Automatically extract project file structure from build bundle file
Showing with 16 additions and 38 deletions
+16 -38
......@@ -98,17 +98,6 @@ module.exports = {
'react-native': 'react-native-web',
},
},
// @remove-on-eject-begin
// Resolve loaders (webpack plugins for CSS, images, transpilation) from the
// directory of `react-scripts` itself rather than the project directory.
resolveLoader: {
modules: [
paths.ownNodeModules,
// Lerna hoists everything, so we need to look in our app directory
paths.appNodeModules,
],
},
// @remove-on-eject-end
module: {
strictExportPresence: true,
rules: [
......@@ -125,13 +114,13 @@ module.exports = {
formatter: eslintFormatter,
// @remove-on-eject-begin
baseConfig: {
extends: ['react-app'],
extends: [require.resolve('eslint-config-react-app')],
},
ignore: false,
useEslintrc: false,
// @remove-on-eject-end
},
loader: 'eslint-loader',
loader: require.resolve('eslint-loader'),
},
],
include: paths.appSrc,
......@@ -156,7 +145,7 @@ module.exports = {
/\.jpe?g$/,
/\.png$/,
],
loader: 'file-loader',
loader: require.resolve('file-loader'),
options: {
name: 'static/media/[name].[hash:8].[ext]',
},
......@@ -166,7 +155,7 @@ module.exports = {
// A missing `test` is equivalent to a match.
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
loader: 'url-loader',
loader: require.resolve('url-loader'),
options: {
limit: 10000,
name: 'static/media/[name].[hash:8].[ext]',
......@@ -176,7 +165,7 @@ module.exports = {
{
test: /\.(js|jsx)$/,
include: paths.appSrc,
loader: 'babel-loader',
loader: require.resolve('babel-loader'),
options: {
// @remove-on-eject-begin
babelrc: false,
......@@ -196,15 +185,15 @@ module.exports = {
{
test: /\.css$/,
use: [
'style-loader',
require.resolve('style-loader'),
{
loader: 'css-loader',
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
},
},
{
loader: 'postcss-loader',
loader: require.resolve('postcss-loader'),
options: {
ident: 'postcss', // https://webpack.js.org/guides/migrating/#complex-options
plugins: () => [
......
......@@ -95,17 +95,6 @@ module.exports = {
'react-native': 'react-native-web',
},
},
// @remove-on-eject-begin
// Resolve loaders (webpack plugins for CSS, images, transpilation) from the
// directory of `react-scripts` itself rather than the project directory.
resolveLoader: {
modules: [
paths.ownNodeModules,
// Lerna hoists everything, so we need to look in our app directory
paths.appNodeModules,
],
},
// @remove-on-eject-end
module: {
strictExportPresence: true,
rules: [
......@@ -124,13 +113,13 @@ module.exports = {
// TODO: consider separate config for production,
// e.g. to enable no-console and no-debugger only in production.
baseConfig: {
extends: ['react-app'],
extends: [require.resolve('eslint-config-react-app')],
},
ignore: false,
useEslintrc: false,
// @remove-on-eject-end
},
loader: 'eslint-loader',
loader: require.resolve('eslint-loader'),
},
],
include: paths.appSrc,
......@@ -154,7 +143,7 @@ module.exports = {
/\.jpe?g$/,
/\.png$/,
],
loader: 'file-loader',
loader: require.resolve('file-loader'),
options: {
name: 'static/media/[name].[hash:8].[ext]',
},
......@@ -163,7 +152,7 @@ module.exports = {
// assets smaller than specified size as data URLs to avoid requests.
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
loader: 'url-loader',
loader: require.resolve('url-loader'),
options: {
limit: 10000,
name: 'static/media/[name].[hash:8].[ext]',
......@@ -173,7 +162,7 @@ module.exports = {
{
test: /\.(js|jsx)$/,
include: paths.appSrc,
loader: 'babel-loader',
loader: require.resolve('babel-loader'),
// @remove-on-eject-begin
options: {
babelrc: false,
......@@ -198,17 +187,17 @@ module.exports = {
loader: ExtractTextPlugin.extract(
Object.assign(
{
fallback: 'style-loader',
fallback: require.resolve('style-loader'),
use: [
{
loader: 'css-loader',
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
minimize: true,
},
},
{
loader: 'postcss-loader',
loader: require.resolve('postcss-loader'),
options: {
ident: 'postcss', // https://webpack.js.org/guides/migrating/#complex-options
plugins: () => [
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment