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.
This commit is contained in:
Dan Abramov
2017-05-15 23:47:28 +01:00
committed by GitHub
parent 814365b4d0
commit d6dbfc0353
2 changed files with 16 additions and 38 deletions

View File

@@ -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: () => [

View File

@@ -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: () => [