improve interpackage config sharing

This commit is contained in:
Shawn Erquhart 2018-07-23 21:25:49 -04:00
parent 8a0ffa7b9b
commit 19f484eeda
19 changed files with 115 additions and 71 deletions

View File

@ -10,23 +10,6 @@ module.exports = {
['babel-plugin-transform-builtin-extend', {
globals: ['Error']
}],
['module-resolver', {
root: [
'./src/components'
],
alias: {
Actions: './src/actions/',
Backends: './src/backends/',
Constants: './src/constants/',
Formats: './src/formats/',
Integrations: './src/integrations/',
Lib: './src/lib/',
Reducers: './src/reducers/',
Redux: './src/redux/',
Routing: './src/routing/',
ValueObjects: './src/valueObjects/',
}
}],
'transform-export-extensions',
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-object-rest-spread',

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -0,0 +1,23 @@
const babelConfig = require('../../babel.config.js');
module.exports = {
...babelConfig,
plugins: [
...babelConfig.plugins,
['module-resolver', {
root: './src/components',
alias: {
src: './src',
Actions: './src/actions/',
Constants: './src/constants/',
Formats: './src/formats/',
Integrations: './src/integrations/',
Lib: './src/lib/',
Reducers: './src/reducers/',
Redux: './src/redux/',
Routing: './src/routing/',
ValueObjects: './src/valueObjects/',
}
}],
],
};

View File

@ -1,5 +1,5 @@
import { actions as notifActions } from 'redux-notifications';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
const { notifSend } = notifActions;

View File

@ -2,7 +2,7 @@ import uuid from 'uuid/v4';
import { actions as notifActions } from 'redux-notifications';
import { BEGIN, COMMIT, REVERT } from 'redux-optimist';
import { serializeValues } from 'Lib/serializeEntryValues';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
import { getAsset } from 'Reducers';
import { selectFields } from 'Reducers/collections';
import { status, EDITORIAL_WORKFLOW } from 'Constants/publishModes';

View File

@ -1,7 +1,7 @@
import { fromJS, List, Set } from 'immutable';
import { actions as notifActions } from 'redux-notifications';
import { serializeValues } from 'Lib/serializeEntryValues';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
import { getIntegrationProvider } from 'Integrations';
import { getAsset, selectIntegration } from 'Reducers';
import { selectFields } from 'Reducers/collections';

View File

@ -1,5 +1,5 @@
import { actions as notifActions } from 'redux-notifications';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
import { createAssetProxy } from 'ValueObjects/AssetProxy';
import { getAsset, selectIntegration } from 'Reducers';
import { getIntegrationProvider } from 'Integrations';

View File

@ -1,5 +1,5 @@
import fuzzy from 'fuzzy';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
import { getIntegrationProvider } from 'Integrations';
import { selectIntegration, selectEntries } from 'Reducers';
import { selectInferedField } from 'Reducers/collections';

View File

@ -9,7 +9,7 @@ import { Notifs } from 'redux-notifications';
import TopBarProgress from 'react-topbar-progress-indicator';
import { loadConfig as actionLoadConfig } from 'Actions/config';
import { loginUser as actionLoginUser, logoutUser as actionLogoutUser } from 'Actions/auth';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
import { showCollection, createNewEntry } from 'Actions/collections';
import { openMediaLibrary as actionOpenMediaLibrary } from 'Actions/mediaLibrary';
import MediaLibrary from 'MediaLibrary/MediaLibrary';

View File

@ -1,5 +1,5 @@
import { resolvePath } from 'netlify-cms-lib-util';
import { currentBackend } from 'Backends/backend';
import { currentBackend } from 'src/backend';
import { getIntegrationProvider } from 'Integrations';
import { selectIntegration } from 'Reducers';

View File

@ -1,14 +1,26 @@
const path = require('path');
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
const baseConfig = require('../../webpack.config.js');
const { getConfig, rules, plugins } = require('../../scripts/webpack.js');
module.exports = {
...baseConfig,
...getConfig(),
context: path.join(__dirname, 'src'),
entry: './index.js',
module: {
rules: [
...baseConfig.module.rules,
...Object.entries(rules)
.filter(([ key ]) => key !== 'js')
.map(([ _, rule ]) => rule()),
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
configFile: path.join(__dirname, 'babel.config.js'),
},
},
},
{
test: /\.css$/,
include: [/redux-notifications/],
@ -16,6 +28,16 @@ module.exports = {
},
],
},
plugins: [
...Object.entries(plugins)
.filter(([ key ]) => key !== 'friendlyErrors')
.map(([ _, plugin ]) => plugin()),
new FriendlyErrorsWebpackPlugin({
compilationSuccessInfo: {
messages: ['Netlify CMS is now running at http://localhost:8080'],
},
}),
],
devServer: {
contentBase: './example',
watchContentBase: true,
@ -23,12 +45,4 @@ module.exports = {
host: 'localhost',
port: 8080,
},
plugins: [
...baseConfig.plugins.filter(plugin => !plugin instanceof FriendlyErrorsWebpackPlugin),
new FriendlyErrorsWebpackPlugin({
compilationSuccessInfo: {
messages: ['Netlify CMS is now running at http://localhost:8080'],
},
}),
],
};

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1 +1,3 @@
module.exports = require('../../webpack.config.js');
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();

View File

@ -1,4 +1,3 @@
const fs = require('fs');
const path = require('path');
const webpack = require('webpack');
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
@ -6,25 +5,43 @@ const pkg = require(path.join(process.cwd(), 'package.json'));
const isProduction = process.env.NODE_ENV === 'production';
const rules = () => ({
js: () => ({
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
configFile: path.resolve(`${__dirname}/../babel.config.js`),
},
},
}),
svg: () => ({
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
exclude: [/node_modules/],
use: 'svg-inline-loader',
}),
});
const plugins = () => {
const defaultPlugins = [
new FriendlyErrorsWebpackPlugin(),
];
const defaultPlugins = {
friendlyErrors: () => new FriendlyErrorsWebpackPlugin()
};
if (isProduction) {
return [
return {
...defaultPlugins,
new webpack.SourceMapDevToolPlugin({
sourcemap: (config = {}) => new webpack.SourceMapDevToolPlugin({
filename: '[file].map',
moduleFilenameTemplate: info => path.posix.normalize(`../src/${info.resourcePath}`),
noSources: true,
}),
];
};
}
return [
return {
...defaultPlugins,
];
}
};
const stats = () => {
@ -44,7 +61,7 @@ const stats = () => {
};
};
module.exports = {
const getConfig = () => ({
mode: isProduction ? 'production' : 'development',
entry: './src/index.js',
output: {
@ -55,27 +72,12 @@ module.exports = {
umdNamedDefine: true,
},
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
configFile: path.join(__dirname, 'babel.config.js'),
},
},
exclude: /node_modules/,
},
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
exclude: [/node_modules/],
loader: 'svg-inline-loader',
},
],
rules: Object.values(rules()).map(rule => rule()),
},
plugins: plugins(),
plugins: Object.values(plugins()).map(plugin => plugin),
devtool: !isProduction && 'source-map',
target: 'web',
/**
* Exclude peer dependencies from package bundles.
*/
@ -85,4 +87,10 @@ module.exports = {
return peerDeps.some(isPeerDep) ? cb(null, request) : cb();
},
stats: stats(),
});
module.exports = {
getConfig,
rules: rules(),
plugins: plugins(),
};