Browse Source

Trying out use(loader, options)

v5.0.0-beta
Eli Perelman 8 years ago
parent
commit
73ef503d15
  1. 2
      packages/neutrino-middleware-banner/index.js
  2. 2
      packages/neutrino-middleware-chunk/index.js
  3. 2
      packages/neutrino-middleware-clean/index.js
  4. 4
      packages/neutrino-middleware-compile-loader/index.js
  5. 2
      packages/neutrino-middleware-copy/index.js
  6. 4
      packages/neutrino-middleware-env/index.js
  7. 4
      packages/neutrino-middleware-eslint/index.js
  8. 2
      packages/neutrino-middleware-font-loader/index.js
  9. 2
      packages/neutrino-middleware-hot/index.js
  10. 2
      packages/neutrino-middleware-html-loader/index.js
  11. 2
      packages/neutrino-middleware-html-template/index.js
  12. 2
      packages/neutrino-middleware-image-loader/index.js
  13. 5
      packages/neutrino-middleware-loader-merge/index.js
  14. 21
      packages/neutrino-middleware-loader-merge/package.json
  15. 7
      packages/neutrino-middleware-loader-merge/yarn.lock
  16. 2
      packages/neutrino-middleware-minify/index.js
  17. 2
      packages/neutrino-middleware-progress/index.js
  18. 2
      packages/neutrino-middleware-style-loader/index.js
  19. 6
      packages/neutrino-preset-airbnb-base/index.js
  20. 3
      packages/neutrino-preset-jest/package.json
  21. 40
      packages/neutrino-preset-jest/src/index.js
  22. 4
      packages/neutrino-preset-karma/index.js
  23. 3
      packages/neutrino-preset-mocha/package.json
  24. 27
      packages/neutrino-preset-mocha/src/index.js
  25. 85
      packages/neutrino-preset-node/index.js
  26. 8
      packages/neutrino-preset-node/package.json
  27. 4
      packages/neutrino-preset-node/yarn.lock
  28. 97
      packages/neutrino-preset-react/index.js
  29. 6
      packages/neutrino-preset-react/package.json
  30. 4210
      packages/neutrino-preset-react/yarn.lock
  31. 105
      packages/neutrino-preset-web/index.js
  32. 2
      packages/neutrino-preset-web/package.json
  33. 4
      packages/neutrino-preset-web/yarn.lock
  34. 8
      packages/neutrino/src/neutrino.js

2
packages/neutrino-middleware-banner/index.js

@ -1,7 +1,7 @@
const { BannerPlugin } = require('webpack'); const { BannerPlugin } = require('webpack');
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => config module.exports = ({ config }, options) => config
.plugin('banner') .plugin('banner')
.use(BannerPlugin, merge({ .use(BannerPlugin, merge({
banner: `require('source-map-support').install();`, banner: `require('source-map-support').install();`,

2
packages/neutrino-middleware-chunk/index.js

@ -1,7 +1,7 @@
const { CommonsChunkPlugin } = require('webpack').optimize; const { CommonsChunkPlugin } = require('webpack').optimize;
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => config module.exports = ({ config }, options) => config
.plugin('chunk') .plugin('chunk')
.use(CommonsChunkPlugin, merge({ .use(CommonsChunkPlugin, merge({
minChunks: Infinity, minChunks: Infinity,

2
packages/neutrino-middleware-clean/index.js

@ -1,7 +1,7 @@
const CleanPlugin = require('clean-webpack-plugin'); const CleanPlugin = require('clean-webpack-plugin');
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => { module.exports = ({ config }, options) => {
const { paths, root } = merge({ paths: [], root: process.cwd() }, options); const { paths, root } = merge({ paths: [], root: process.cwd() }, options);
config config

4
packages/neutrino-middleware-compile-loader/index.js

@ -1,5 +1,5 @@
module.exports = options => config => config.module module.exports = ({ config }, options) => config.module
.rule('compile') .rule('compile')
.test(/\.js$/) .test(/\.jsx?$/)
.include(...options.include) .include(...options.include)
.loader('babel', require.resolve('babel-loader'), options.babel); .loader('babel', require.resolve('babel-loader'), options.babel);

2
packages/neutrino-middleware-copy/index.js

@ -1,7 +1,7 @@
const CopyPlugin = require('copy-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin');
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => { module.exports = ({ config }, options) => {
const opts = merge({ patterns: [], options: {} }, options); const opts = merge({ patterns: [], options: {} }, options);
config config

4
packages/neutrino-middleware-env/index.js

@ -1,5 +1,5 @@
const { EnvironmentPlugin } = require('webpack'); const { EnvironmentPlugin } = require('webpack');
module.exports = (envs = []) => config => config module.exports = ({ config }, envs = []) => config
.plugin('env') .plugin('env')
.use(EnvironmentPlugin, ['NODE_ENV', ...envs]); .use(EnvironmentPlugin, ['NODE_ENV', ...(Array.isArray(envs) ? envs : [])]);

4
packages/neutrino-middleware-eslint/index.js

@ -5,7 +5,9 @@ const { join } = require('path');
const IF_NOT_DEV = process.env.NODE_ENV !== 'development'; const IF_NOT_DEV = process.env.NODE_ENV !== 'development';
const MODULES = join(__dirname, 'node_modules'); const MODULES = join(__dirname, 'node_modules');
module.exports = options => (config, neutrino) => { module.exports = (neutrino, options) => {
const { config } = neutrino;
config.resolve.modules.add(MODULES); config.resolve.modules.add(MODULES);
config.resolveLoader.modules.add(MODULES); config.resolveLoader.modules.add(MODULES);
config.module config.module

2
packages/neutrino-middleware-font-loader/index.js

@ -1,6 +1,6 @@
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => { module.exports = ({ config }, options) => {
const { limit } = merge({ limit: '10000' }, options); const { limit } = merge({ limit: '10000' }, options);
const urlLoader = require.resolve('url-loader'); const urlLoader = require.resolve('url-loader');
const fileLoader = require.resolve('file-loader'); const fileLoader = require.resolve('file-loader');

2
packages/neutrino-middleware-hot/index.js

@ -1,3 +1,3 @@
const { HotModuleReplacementPlugin } = require('webpack'); const { HotModuleReplacementPlugin } = require('webpack');
module.exports = () => config => config.plugin('hot').use(HotModuleReplacementPlugin); module.exports = ({ config }) => config.plugin('hot').use(HotModuleReplacementPlugin);

2
packages/neutrino-middleware-html-loader/index.js

@ -1,4 +1,4 @@
module.exports = () => config => config.module module.exports = ({ config }) => config.module
.rule('html') .rule('html')
.test(/\.html$/) .test(/\.html$/)
.loader('file', require.resolve('file-loader'), { name: '[name].[ext]' }); .loader('file', require.resolve('file-loader'), { name: '[name].[ext]' });

2
packages/neutrino-middleware-html-template/index.js

@ -2,7 +2,7 @@ const HtmlPlugin = require('html-webpack-plugin');
const template = require('html-webpack-template'); const template = require('html-webpack-template');
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => config module.exports = ({ config }, options) => config
.plugin('html') .plugin('html')
.use(HtmlPlugin, merge({ .use(HtmlPlugin, merge({
template, template,

2
packages/neutrino-middleware-image-loader/index.js

@ -1,6 +1,6 @@
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (options = {}) => config => { module.exports = ({ config }, options) => {
const { limit } = merge({ limit: 8192 }, options); const { limit } = merge({ limit: 8192 }, options);
const urlLoader = require.resolve('url-loader'); const urlLoader = require.resolve('url-loader');

5
packages/neutrino-middleware-loader-merge/index.js

@ -0,0 +1,5 @@
const merge = require('deepmerge');
module.exports = (ruleId, loaderId) => ({ config }, options) => config.module
.rule(ruleId)
.loader(loaderId, props => merge(props, { options }));

21
packages/neutrino-middleware-loader-merge/package.json

@ -0,0 +1,21 @@
{
"name": "neutrino-middleware-loader-merge",
"version": "5.0.0",
"description": "Neutrino middleware for merging options into existing ruleset loader options",
"main": "index.js",
"keywords": [
"neutrino",
"neutrino-middleware",
"rule",
"loader",
"merge"
],
"author": "Eli Perelman <eli@eliperelman.com>",
"license": "MPL-2.0",
"repository": "mozilla-neutrino/neutrino-dev",
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues",
"dependencies": {
"deepmerge": "^1.3.2"
}
}

7
packages/neutrino-middleware-loader-merge/yarn.lock

@ -0,0 +1,7 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
deepmerge@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050"

2
packages/neutrino-middleware-minify/index.js

@ -1,3 +1,3 @@
const BabiliPlugin = require('babili-webpack-plugin'); const BabiliPlugin = require('babili-webpack-plugin');
module.exports = () => config => config.plugin('minify').use(BabiliPlugin); module.exports = ({ config }) => config.plugin('minify').use(BabiliPlugin);

2
packages/neutrino-middleware-progress/index.js

@ -1,3 +1,3 @@
const ProgressBarPlugin = require('progress-bar-webpack-plugin'); const ProgressBarPlugin = require('progress-bar-webpack-plugin');
module.exports = () => config => config.plugin('progress').use(ProgressBarPlugin); module.exports = ({ config }) => config.plugin('progress').use(ProgressBarPlugin);

2
packages/neutrino-middleware-style-loader/index.js

@ -1,4 +1,4 @@
module.exports = () => config => config.module module.exports = ({ config }) => config.module
.rule('style') .rule('style')
.test(/\.css$/) .test(/\.css$/)
.loader('style', require.resolve('style-loader')) .loader('style', require.resolve('style-loader'))

6
packages/neutrino-preset-airbnb-base/index.js

@ -1,7 +1,7 @@
const lint = require('neutrino-middleware-eslint'); const lint = require('neutrino-middleware-eslint');
const { join } = require('path'); const { join } = require('path');
module.exports = (config, neutrino) => neutrino.use(lint({ module.exports = neutrino => neutrino.use(lint, {
include: [join(process.cwd(), 'SRC')], include: [join(process.cwd(), 'SRC')],
eslint: { eslint: {
baseConfig: { baseConfig: {
@ -15,7 +15,7 @@ module.exports = (config, neutrino) => neutrino.use(lint({
'object-curly-spacing': 'off', 'object-curly-spacing': 'off',
// require a capital letter for constructors // require a capital letter for constructors
'babel/new-cap': ['error', {newIsCap: true}], 'babel/new-cap': ['error', { newIsCap: true }],
// require padding inside curly braces // require padding inside curly braces
'babel/object-curly-spacing': ['error', 'always'], 'babel/object-curly-spacing': ['error', 'always'],
@ -24,4 +24,4 @@ module.exports = (config, neutrino) => neutrino.use(lint({
'babel/no-await-in-loop': 'error' 'babel/no-await-in-loop': 'error'
} }
} }
})); });

3
packages/neutrino-preset-jest/package.json

@ -21,7 +21,8 @@
"eslint-plugin-jest": "^19.0.1", "eslint-plugin-jest": "^19.0.1",
"jest": "^19.0.2", "jest": "^19.0.2",
"jest-cli": "^19.0.2", "jest-cli": "^19.0.2",
"lodash.clonedeep": "^4.5.0" "lodash.clonedeep": "^4.5.0",
"neutrino-middleware-loader-merge": "^5.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"neutrino": "^5.0.0" "neutrino": "^5.0.0"

40
packages/neutrino-preset-jest/src/index.js

@ -4,6 +4,7 @@ const path = require('path');
const merge = require('deepmerge'); const merge = require('deepmerge');
const os = require('os'); const os = require('os');
const clone = require('lodash.clonedeep'); const clone = require('lodash.clonedeep');
const loaderMerge = require('neutrino-middleware-loader-merge');
const pkg = require(path.join(process.cwd(), 'package.json')); const pkg = require(path.join(process.cwd(), 'package.json'));
function normalizeJestOptions(jestOptions, config, args) { function normalizeJestOptions(jestOptions, config, args) {
@ -33,15 +34,7 @@ function normalizeJestOptions(jestOptions, config, args) {
return options; return options;
} }
const compile = ({ babel }) => config => config.module module.exports = neutrino => {
.rule('compile')
.loader('babel', props => merge(props, { options: babel }));
const lint = ({ eslint }) => config => config.module
.rule('lint')
.loader('eslint', props => merge(props, { options: eslint }));
module.exports = (config, neutrino) => {
const jestOptions = merge.all([ const jestOptions = merge.all([
{ {
bail: true, bail: true,
@ -57,26 +50,25 @@ module.exports = (config, neutrino) => {
'\\.(css|less|sass)$': require.resolve('./style-mock') '\\.(css|less|sass)$': require.resolve('./style-mock')
} }
}, },
pkg.jest, pkg.jest || {},
neutrino.options.jest neutrino.options.jest || {}
]); ]);
neutrino.use([ neutrino.use(loaderMerge('compile', 'babel'), {
compile({ env: {
babel: { test: {
env: { retainLines: true,
test: { presets: [require.resolve('babel-preset-jest')],
retainLines: true, plugins: [require.resolve('babel-plugin-transform-es2015-modules-commonjs')]
presets: [require.resolve('babel-preset-jest')],
plugins: [require.resolve('babel-plugin-transform-es2015-modules-commonjs')]
}
}
} }
}) }
]); });
if (neutrino.config.module.rules.has('lint')) { if (neutrino.config.module.rules.has('lint')) {
neutrino.use(lint({ eslint: { plugins: ['jest'], envs: ['jest'] } })); neutrino.use(loaderMerge('lint', 'eslint'), {
plugins: ['jest'],
envs: ['jest']
});
} }
neutrino.on('test', args => { neutrino.on('test', args => {

4
packages/neutrino-preset-karma/index.js

@ -1,7 +1,7 @@
const { Server } = require('karma'); const { Server } = require('karma');
const merge = require('deepmerge'); const merge = require('deepmerge');
module.exports = (config, neutrino) => { module.exports = neutrino => {
const defaults = { const defaults = {
plugins: [ plugins: [
require.resolve('karma-webpack'), require.resolve('karma-webpack'),
@ -38,7 +38,7 @@ module.exports = (config, neutrino) => {
neutrino.on('test', ({ files, watch }) => { neutrino.on('test', ({ files, watch }) => {
const karma = merge.all([ const karma = merge.all([
defaults, defaults,
neutrino.options.karma, neutrino.options.karma || {},
{ {
singleRun: !watch, singleRun: !watch,
autoWatch: watch, autoWatch: watch,

3
packages/neutrino-preset-mocha/package.json

@ -16,7 +16,8 @@
"babel-register": "^6.23.0", "babel-register": "^6.23.0",
"change-case": "^3.0.1", "change-case": "^3.0.1",
"deepmerge": "^1.3.2", "deepmerge": "^1.3.2",
"mocha": "^3.2.0" "mocha": "^3.2.0",
"neutrino-middleware-loader-merge": "^5.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"neutrino": "^5.0.0" "neutrino": "^5.0.0"

27
packages/neutrino-preset-mocha/src/index.js

@ -1,27 +1,18 @@
const mocha = require('./mocha'); const mocha = require('./mocha');
const merge = require('deepmerge'); const merge = require('deepmerge');
const loaderMerge = require('neutrino-middleware-loader-merge');
module.exports = (config, neutrino) => { module.exports = neutrino => {
const defaults = { neutrino.use(loaderMerge('compile', 'babel'), {
reporter: 'spec', env: {
ui: 'tdd', test: {
bail: true plugins: [require.resolve('babel-plugin-transform-es2015-modules-commonjs')]
};
config.module
.rule('compile')
.loader('babel', props => merge(props, {
options: {
env: {
test: {
plugins: [require.resolve('babel-plugin-transform-es2015-modules-commonjs')]
}
}
} }
})); }
});
neutrino.on('test', ({ files }) => mocha( neutrino.on('test', ({ files }) => mocha(
merge(defaults, neutrino.options.mocha), merge({ reporter: 'spec', ui: 'tdd', bail: true }, neutrino.options.mocha || {}),
neutrino.config.module.rule('compile').loaders.get('babel').options, neutrino.config.module.rule('compile').loaders.get('babel').options,
files files
)); ));

85
packages/neutrino-preset-node/index.js

@ -3,9 +3,9 @@ const compile = require('neutrino-middleware-compile-loader');
const copy = require('neutrino-middleware-copy'); const copy = require('neutrino-middleware-copy');
const progress = require('neutrino-middleware-progress'); const progress = require('neutrino-middleware-progress');
const clean = require('neutrino-middleware-clean'); const clean = require('neutrino-middleware-clean');
const loaderMerge = require('neutrino-middleware-loader-merge');
const nodeExternals = require('webpack-node-externals'); const nodeExternals = require('webpack-node-externals');
const { join } = require('path'); const { join } = require('path');
const merge = require('deepmerge');
const CWD = process.cwd(); const CWD = process.cwd();
const SRC = join(CWD, 'src'); const SRC = join(CWD, 'src');
@ -15,8 +15,10 @@ const PROJECT_MODULES = join(CWD, 'node_modules');
const MODULES = join(__dirname, 'node_modules'); const MODULES = join(__dirname, 'node_modules');
const PKG = require(join(CWD, 'package.json')); const PKG = require(join(CWD, 'package.json'));
module.exports = (config, neutrino) => { module.exports = neutrino => {
neutrino.use(compile({ const { config } = neutrino;
neutrino.use(compile, {
include: [SRC, TEST], include: [SRC, TEST],
babel: { babel: {
presets: [ presets: [
@ -28,7 +30,7 @@ module.exports = (config, neutrino) => {
}] }]
] ]
} }
})); });
config.options.set('performance', { hints: false }); config.options.set('performance', { hints: false });
config config
@ -68,60 +70,57 @@ module.exports = (config, neutrino) => {
(PKG.devDependencies && 'source-map-support' in PKG.devDependencies); (PKG.devDependencies && 'source-map-support' in PKG.devDependencies);
if (hasSourceMap) { if (hasSourceMap) {
neutrino.use(banner()); neutrino.use(banner);
} }
if (process.env.NODE_ENV !== 'development') { if (process.env.NODE_ENV !== 'development') {
neutrino.use([ neutrino.use(clean, { paths: [BUILD] });
copy({ patterns: [{ context: SRC, from: `**/*` }], options: { ignore: ['*.js*'] } }), neutrino.use(progress);
progress(), neutrino.use(copy, {
clean({ paths: [BUILD] }) patterns: [{ context: SRC, from: `**/*` }],
]) options: { ignore: ['*.js*'] }
});
} }
if (config.module.rules.has('lint')) { if (config.module.rules.has('lint')) {
config.module neutrino.use(loaderMerge('lint', 'eslint'), {
.rule('lint') envs: ['node'],
.loader('eslint', props => merge(props, { rules: {
options: { // enforce return after a callback
envs: ['node'], 'callback-return': 'off',
rules: {
// enforce return after a callback
'callback-return': 'off',
// require all requires be top-level // require all requires be top-level
// http://eslint.org/docs/rules/global-require // http://eslint.org/docs/rules/global-require
'global-require': 'error', 'global-require': 'error',
// enforces error handling in callbacks (node environment) // enforces error handling in callbacks (node environment)
'handle-callback-err': 'off', 'handle-callback-err': 'off',
// Allow console in Node.js // Allow console in Node.js
'no-console': 'off', 'no-console': 'off',
// disallow mixing regular variable and require declarations // disallow mixing regular variable and require declarations
'no-mixed-requires': ['off', false], 'no-mixed-requires': ['off', false],
// disallow use of new operator with the require function // disallow use of new operator with the require function
'no-new-require': 'error', 'no-new-require': 'error',
// disallow string concatenation with __dirname and __filename // disallow string concatenation with __dirname and __filename
// http://eslint.org/docs/rules/no-path-concat // http://eslint.org/docs/rules/no-path-concat
'no-path-concat': 'error', 'no-path-concat': 'error',
// disallow use of process.env // disallow use of process.env
'no-process-env': 'off', 'no-process-env': 'off',
// disallow process.exit() // disallow process.exit()
'no-process-exit': 'off', 'no-process-exit': 'off',
// restrict usage of specified node modules // restrict usage of specified node modules
'no-restricted-modules': 'off', 'no-restricted-modules': 'off',
// disallow use of synchronous methods (off by default) // disallow use of synchronous methods (off by default)
'no-sync': 'off' 'no-sync': 'off'
} }
} });
}));
} }
}; };

8
packages/neutrino-preset-node/package.json

@ -16,15 +16,15 @@
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues", "bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues",
"dependencies": { "dependencies": {
"babel-preset-env": "^1.1.10", "babel-preset-env": "^1.1.10",
"deepmerge": "^1.3.2",
"exports-loader": "^0.6.4", "exports-loader": "^0.6.4",
"imports-loader": "^0.7.1", "imports-loader": "^0.7.1",
"webpack-node-externals": "1.5.4",
"neutrino-middleware-banner": "^5.0.0", "neutrino-middleware-banner": "^5.0.0",
"neutrino-middleware-clean": "^5.0.0",
"neutrino-middleware-compile-loader": "^5.0.0", "neutrino-middleware-compile-loader": "^5.0.0",
"neutrino-middleware-copy": "^5.0.0", "neutrino-middleware-copy": "^5.0.0",
"neutrino-middleware-progress": "^5.0.0", "neutrino-middleware-loader-merge": "^5.0.0",
"neutrino-middleware-clean": "^5.0.0", "neutrino-middleware-progress": "^5.0.0"
"webpack-node-externals": "1.5.4"
}, },
"peerDependencies": { "peerDependencies": {
"neutrino": "^5.0.0" "neutrino": "^5.0.0"

4
packages/neutrino-preset-node/yarn.lock

@ -447,10 +447,6 @@ debug@^2.2.0:
dependencies: dependencies:
ms "0.7.1" ms "0.7.1"
deepmerge@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050"
electron-to-chromium@^1.1.0, electron-to-chromium@^1.2.2: electron-to-chromium@^1.1.0, electron-to-chromium@^1.2.2:
version "1.2.2" version "1.2.2"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.2.tgz#e41bc9488c88e3cfa1e94bde28e8420d7d47c47c" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.2.tgz#e41bc9488c88e3cfa1e94bde28e8420d7d47c47c"

97
packages/neutrino-preset-react/index.js

@ -1,11 +1,22 @@
const loaderMerge = require('neutrino-middleware-loader-merge');
const web = require('neutrino-preset-web'); const web = require('neutrino-preset-web');
const merge = require('deepmerge');
const { join } = require('path'); const { join } = require('path');
const MODULES = join(__dirname, 'node_modules'); const MODULES = join(__dirname, 'node_modules');
module.exports = (config, neutrino) => { module.exports = neutrino => {
const { config } = neutrino;
neutrino.use(web); neutrino.use(web);
neutrino.use(loaderMerge('compile', 'babel'), {
presets: [require.resolve('babel-preset-react')],
plugins: [require.resolve('babel-plugin-transform-object-rest-spread')],
env: {
development: {
plugins: [require.resolve('react-hot-loader/babel')]
}
}
});
config.resolve.modules.add(MODULES); config.resolve.modules.add(MODULES);
config.resolve.extensions.add('.jsx'); config.resolve.extensions.add('.jsx');
@ -18,21 +29,6 @@ module.exports = (config, neutrino) => {
'react/lib/ReactContext': 'window' 'react/lib/ReactContext': 'window'
}); });
config.module
.rule('compile')
.test(/\.jsx?$/)
.loader('babel', props => merge(props, {
options: {
presets: [require.resolve('babel-preset-react')],
plugins: [require.resolve('babel-plugin-transform-object-rest-spread')],
env: {
development: {
plugins: [require.resolve('react-hot-loader/babel')]
}
}
}
}));
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
config config
.entry('index') .entry('index')
@ -40,44 +36,35 @@ module.exports = (config, neutrino) => {
} }
if (config.module.rules.has('lint')) { if (config.module.rules.has('lint')) {
config.module neutrino.use(loaderMerge('lint', 'eslint'), {
.rule('lint') plugins: ['react'],
.test(/\.jsx?$/) baseConfig: {
.loader('eslint', props => merge(props, { extends: ['plugin:react/recommended']
options: { },
plugins: ['react'], parserOptions: {
baseConfig: { ecmaFeatures: {
extends: ['plugin:react/recommended'] experimentalObjectRestSpread: true
},
parserOptions: {
ecmaFeatures: {
experimentalObjectRestSpread: true
}
},
rules: {
'react/prop-types': ['off'],
'jsx-quotes': ['error', 'prefer-double'],
'class-methods-use-this': ['error', {
exceptMethods: [
'render',
'getInitialState',
'getDefaultProps',
'getChildContext',
'componentWillMount',
'componentDidMount',
'componentWillReceiveProps',
'shouldComponentUpdate',
'componentWillUpdate',
'componentDidUpdate',
'componentWillUnmount'
]
}]
}
} }
})); },
rules: {
'react/prop-types': ['off'],
'jsx-quotes': ['error', 'prefer-double'],
'class-methods-use-this': ['error', {
exceptMethods: [
'render',
'getInitialState',
'getDefaultProps',
'getChildContext',
'componentWillMount',
'componentDidMount',
'componentWillReceiveProps',
'shouldComponentUpdate',
'componentWillUpdate',
'componentDidUpdate',
'componentWillUnmount'
]
}]
}
});
} }
// console.log(config.module.toConfig());
// console.log(neutrino.getWebpackOptions().module.rules);
// process.exit();
}; };

6
packages/neutrino-preset-react/package.json

@ -18,10 +18,10 @@
"dependencies": { "dependencies": {
"babel-plugin-transform-object-rest-spread": "^6.23.0", "babel-plugin-transform-object-rest-spread": "^6.23.0",
"babel-preset-react": "^6.23.0", "babel-preset-react": "^6.23.0",
"deepmerge": "^1.3.2",
"eslint-plugin-react": "^6.10.0", "eslint-plugin-react": "^6.10.0",
"neutrino-preset-web": "^5.0.0", "react-hot-loader": "^3.0.0-beta.6",
"react-hot-loader": "^3.0.0-beta.6" "neutrino-middleware-loader-merge": "^5.0.0",
"neutrino-preset-web": "^5.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"neutrino": "^5.0.0" "neutrino": "^5.0.0"

4210
packages/neutrino-preset-react/yarn.lock

File diff suppressed because it is too large

105
packages/neutrino-preset-web/index.js

@ -11,7 +11,7 @@ const copy = require('neutrino-middleware-copy');
const progress = require('neutrino-middleware-progress'); const progress = require('neutrino-middleware-progress');
const clean = require('neutrino-middleware-clean'); const clean = require('neutrino-middleware-clean');
const minify = require('neutrino-middleware-minify'); const minify = require('neutrino-middleware-minify');
const merge = require('deepmerge'); const loaderMerge = require('neutrino-middleware-loader-merge');
const { join } = require('path'); const { join } = require('path');
const CWD = process.cwd(); const CWD = process.cwd();
@ -22,7 +22,7 @@ const PKG = require(join(CWD, 'package.json'));
const PROJECT_MODULES = join(CWD, 'node_modules'); const PROJECT_MODULES = join(CWD, 'node_modules');
const MODULES = join(__dirname, 'node_modules'); const MODULES = join(__dirname, 'node_modules');
const devServer = (options = {}) => config => config.devServer const devServer = ({ config }, options) => config.devServer
.host(options.host) .host(options.host)
.port(parseInt(options.port)) .port(parseInt(options.port))
.https(options.https) .https(options.https)
@ -44,40 +44,40 @@ const devServer = (options = {}) => config => config.devServer
warnings: true warnings: true
}); });
module.exports = (config, neutrino) => { module.exports = neutrino => {
neutrino.use([ const { config } = neutrino;
env(),
htmlLoader(), neutrino.use(env);
styleLoader(), neutrino.use(htmlLoader);
fontLoader(), neutrino.use(styleLoader);
imageLoader(), neutrino.use(fontLoader);
htmlTemplate(), neutrino.use(imageLoader);
compileLoader({ neutrino.use(htmlTemplate);
include: [SRC, TEST], neutrino.use(compileLoader, {
babel: { include: [SRC, TEST],
presets: [ babel: {
[require.resolve('babel-preset-env'), { presets: [
modules: false, [require.resolve('babel-preset-env'), {
useBuiltIns: true, modules: false,
include: ['transform-regenerator'], useBuiltIns: true,
targets: { include: ['transform-regenerator'],
browsers: [ targets: {
'last 2 Chrome versions', browsers: [
'last 2 Firefox versions', 'last 2 Chrome versions',
'last 2 Edge versions', 'last 2 Firefox versions',
'last 2 Opera versions', 'last 2 Edge versions',
'last 2 Safari versions', 'last 2 Opera versions',
'last 2 iOS versions' 'last 2 Safari versions',
] 'last 2 iOS versions'
} ]
}] }
] }]
} ]
}) }
]); });
if (process.env.NODE_ENV !== 'test') { if (process.env.NODE_ENV !== 'test') {
neutrino.use(chunk()); neutrino.use(chunk);
} }
config config
@ -108,14 +108,10 @@ module.exports = (config, neutrino) => {
.set('tls', 'empty'); .set('tls', 'empty');
if (config.module.rules.has('lint')) { if (config.module.rules.has('lint')) {
config.module neutrino.use(loaderMerge('lint', 'eslint'), {
.rule('lint') globals: ['Buffer'],
.loader('eslint', props => merge(props, { envs: ['browser', 'commonjs']
options: { });
globals: ['Buffer'],
envs: ['browser', 'commonjs']
}
}));
} }
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
@ -127,10 +123,13 @@ module.exports = (config, neutrino) => {
(PKG.neutrino && PKG.neutrino.config && PKG.neutrino.config.devServer && PKG.neutrino.config.devServer.port) || (PKG.neutrino && PKG.neutrino.config && PKG.neutrino.config.devServer && PKG.neutrino.config.devServer.port) ||
5000; 5000;
neutrino.use([ neutrino.use(hot);
devServer({ host, port, https: protocol === 'https', contentBase: SRC }), neutrino.use(devServer, {
hot() host,
]); port,
https: protocol === 'https',
contentBase: SRC
});
config config
.devtool('eval') .devtool('eval')
@ -138,13 +137,13 @@ module.exports = (config, neutrino) => {
.add(`webpack-dev-server/client?${protocol}://${host}:${port}/`) .add(`webpack-dev-server/client?${protocol}://${host}:${port}/`)
.add('webpack/hot/dev-server'); .add('webpack/hot/dev-server');
} else { } else {
neutrino.use([ neutrino.use(clean, { paths: [BUILD] });
copy({ patterns: [{ context: SRC, from: `**/*` }], options: { ignore: ['*.js*'] } }), neutrino.use(progress);
progress(), neutrino.use(minify);
clean({ paths: [BUILD] }), neutrino.use(copy, {
minify() patterns: [{ context: SRC, from: `**/*` }],
]); options: { ignore: ['*.js*'] }
});
config.output.filename('[name].[chunkhash].bundle.js'); config.output.filename('[name].[chunkhash].bundle.js');
} }
}; };

2
packages/neutrino-preset-web/package.json

@ -16,7 +16,6 @@
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues", "bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues",
"dependencies": { "dependencies": {
"babel-preset-env": "^1.1.10", "babel-preset-env": "^1.1.10",
"deepmerge": "^1.3.2",
"exports-loader": "^0.6.4", "exports-loader": "^0.6.4",
"imports-loader": "^0.7.1", "imports-loader": "^0.7.1",
"webpack": "^2.2.1", "webpack": "^2.2.1",
@ -30,6 +29,7 @@
"neutrino-middleware-html-loader": "^5.0.0", "neutrino-middleware-html-loader": "^5.0.0",
"neutrino-middleware-html-template": "^5.0.0", "neutrino-middleware-html-template": "^5.0.0",
"neutrino-middleware-hot": "^5.0.0", "neutrino-middleware-hot": "^5.0.0",
"neutrino-middleware-loader-merge": "^5.0.0",
"neutrino-middleware-image-loader": "^5.0.0", "neutrino-middleware-image-loader": "^5.0.0",
"neutrino-middleware-progress": "^5.0.0", "neutrino-middleware-progress": "^5.0.0",
"neutrino-middleware-minify": "^5.0.0", "neutrino-middleware-minify": "^5.0.0",

4
packages/neutrino-preset-web/yarn.lock

@ -862,10 +862,6 @@ deep-extend@~0.4.0:
version "0.4.1" version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
deepmerge@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050"
delayed-stream@~1.0.0: delayed-stream@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"

8
packages/neutrino/src/neutrino.js

@ -12,12 +12,8 @@ class Neutrino extends EventEmitter {
this.options = options; this.options = options;
} }
use(presets = []) { use(preset, options = {}) {
if (!Array.isArray(presets)) { preset(this, options);
presets = [presets];
}
presets.map(preset => preset(this.config, this));
} }
handleErrors(err, stats) { handleErrors(err, stats) {

Loading…
Cancel
Save