Skip to content

Commit

Permalink
Support hoisting react-scripts and add require.resolve() to loaders (#…
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
gaearon committed May 15, 2017
1 parent 814365b commit d6dbfc0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 38 deletions.
27 changes: 8 additions & 19 deletions packages/react-scripts/config/webpack.config.dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand All @@ -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,
Expand All @@ -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]',
},
Expand All @@ -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]',
Expand All @@ -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,
Expand All @@ -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: () => [
Expand Down
27 changes: 8 additions & 19 deletions packages/react-scripts/config/webpack.config.prod.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand All @@ -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,
Expand All @@ -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]',
},
Expand All @@ -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]',
Expand All @@ -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,
Expand All @@ -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: () => [
Expand Down

0 comments on commit d6dbfc0

Please sign in to comment.