Skip to content

Instantly share code, notes, and snippets.

@edmorley
Created September 14, 2018 18:07
Show Gist options
  • Save edmorley/32f3955f21d58a4efe5b17650a822485 to your computer and use it in GitHub Desktop.
Save edmorley/32f3955f21d58a4efe5b17650a822485 to your computer and use it in GitHub Desktop.
React+AirBnB Neutrino presets export
module.exports = {
mode: 'production',
target: 'web',
context: 'C:\\Users\\Ed\\src\\test-project',
stats: {
children: false,
entrypoints: false,
modules: false
},
node: {
Buffer: false,
fs: 'empty',
tls: 'empty'
},
output: {
path: 'C:\\Users\\Ed\\src\\test-project\\build',
publicPath: './',
filename: '[name].[contenthash:8].js',
chunkFilename: '[name].[contenthash:8].js'
},
resolve: {
alias: {
'react-native': 'react-native-web'
},
extensions: [
'.web.jsx',
'.web.js',
'.wasm',
'.mjs',
'.vue',
'.jsx',
'.tsx',
'.ts',
'.js',
'.json'
]
},
module: {
rules: [
/* neutrino.config.module.rule('lint') */
{
test: /\.(wasm|mjs|vue|jsx|tsx|ts|js)$/,
enforce: 'pre',
include: [
'C:\\Users\\Ed\\src\\test-project\\src',
'C:\\Users\\Ed\\src\\test-project\\test'
],
use: [
/* neutrino.config.module.rule('lint').use('eslint') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\eslint-loader\\index.js',
options: {
cache: true,
failOnError: true,
cwd: 'C:\\Users\\Ed\\src\\test-project',
useEslintrc: false,
root: true,
formatter: require('eslint/lib/formatters/codeframe'),
plugins: [
'babel',
'react',
'jest'
],
baseConfig: {
'extends': [
'C:\\Users\\Ed\\src\\neutrino\\node_modules\\eslint-config-airbnb\\index.js'
]
},
envs: [
'es6',
'browser',
'commonjs',
'jest/globals'
],
parser: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\babel-eslint\\lib\\index.js',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module'
},
settings: {},
globals: [
'process'
],
rules: {
'new-cap': 'off',
'no-invalid-this': 'off',
'object-curly-spacing': 'off',
semi: 'off',
'no-unused-expressions': 'off',
'babel/new-cap': [
'error',
{
newIsCap: true,
newIsCapExceptions: [],
capIsNew: false,
capIsNewExceptions: [
'Immutable.Map',
'Immutable.Set',
'Immutable.List'
]
}
],
'babel/no-invalid-this': 'off',
'babel/object-curly-spacing': [
'error',
'always'
],
'babel/semi': [
'error',
'always'
],
'babel/no-unused-expressions': [
'error',
{
allowShortCircuit: false,
allowTernary: false,
allowTaggedTemplates: false
}
],
'jest/no-disabled-tests': 'warn',
'jest/no-focused-tests': 'error',
'jest/no-identical-title': 'error',
'jest/valid-expect': 'error'
}
}
}
]
},
/* neutrino.config.module.rule('html') */
{
test: /\.html$/,
use: [
/* neutrino.config.module.rule('html').use('html') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\html-loader\\index.js',
options: {
attrs: [
'img:src',
'link:href'
]
}
}
]
},
/* neutrino.config.module.rule('compile') */
{
test: /\.(wasm|mjs|vue|jsx|tsx|ts|js)$/,
include: [
'C:\\Users\\Ed\\src\\test-project\\src',
'C:\\Users\\Ed\\src\\test-project\\test'
],
use: [
/* neutrino.config.module.rule('compile').use('babel') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\babel-loader\\lib\\index.js',
options: {
cacheDirectory: true,
babelrc: false,
presets: [
[
'C:\\Users\\Ed\\src\\neutrino\\node_modules\\@babel\\preset-env\\lib\\index.js',
{
debug: false,
useBuiltIns: 'entry',
targets: {
browsers: [
'last 2 Chrome versions',
'last 2 Firefox versions',
'last 2 Edge versions',
'last 2 Opera versions',
'last 2 Safari versions',
'last 2 iOS versions'
]
}
}
],
[
'C:\\Users\\Ed\\src\\neutrino\\node_modules\\@babel\\preset-react\\lib\\index.js',
{
development: false,
useBuiltIns: true
}
]
],
plugins: [
'C:\\Users\\Ed\\src\\neutrino\\node_modules\\@babel\\plugin-syntax-dynamic-import\\lib\\index.js',
[
'C:\\Users\\Ed\\src\\neutrino\\node_modules\\@babel\\plugin-proposal-class-properties\\lib\\index.js',
{
loose: true
}
]
]
}
}
]
},
/* neutrino.config.module.rule('style') */
{
test: /\.css$/,
exclude: [
/\.module\.css$/
],
use: [
/* neutrino.config.module.rule('style').use('extract') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\mini-css-extract-plugin\\dist\\loader.js'
},
/* neutrino.config.module.rule('style').use('css') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\css-loader\\index.js',
options: {
importLoaders: 0
}
}
]
},
/* neutrino.config.module.rule('style-modules') */
{
test: /\.module\.css$/,
use: [
/* neutrino.config.module.rule('style-modules').use('extract-modules') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\mini-css-extract-plugin\\dist\\loader.js'
},
/* neutrino.config.module.rule('style-modules').use('css-modules') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\css-loader\\index.js',
options: {
importLoaders: 0,
modules: true
}
}
]
},
/* neutrino.config.module.rule('font') */
{
test: /\.(eot|ttf|woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
use: [
/* neutrino.config.module.rule('font').use('file') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\file-loader\\dist\\cjs.js',
options: {
name: '[name].[hash:8].[ext]'
}
}
]
},
/* neutrino.config.module.rule('image') */
{
test: /\.(ico|png|jpg|jpeg|gif|svg|webp)(\?v=\d+\.\d+\.\d+)?$/,
use: [
/* neutrino.config.module.rule('image').use('url') */
{
loader: 'C:\\Users\\Ed\\src\\neutrino\\node_modules\\url-loader\\dist\\cjs.js',
options: {
limit: 8192,
name: '[name].[hash:8].[ext]'
}
}
]
}
]
},
optimization: {
minimize: true,
splitChunks: {
chunks: 'all',
maxInitialRequests: 5,
name: false
},
runtimeChunk: 'single'
},
plugins: [
/* neutrino.config.plugin('html-index') */
new (require('C:\\Users\\Ed\\src\\neutrino\\node_modules\\html-webpack-plugin\\index.js'))(
{
template: 'C:\\Users\\Ed\\src\\neutrino\\packages\\html-template\\template.ejs',
appMountId: 'root',
lang: 'en',
meta: {
viewport: 'width=device-width, initial-scale=1'
},
minify: {
useShortDoctype: true,
keepClosingSlash: true,
collapseWhitespace: true,
preserveLineBreaks: true
},
filename: 'index.html',
chunks: [
'index'
],
title: 'test-project'
}
),
/* neutrino.config.plugin('extract') */
new (require('C:\\Users\\Ed\\src\\neutrino\\node_modules\\mini-css-extract-plugin\\dist\\cjs.js'))(
{
filename: '[name].[contenthash:8].css'
}
),
/* neutrino.config.plugin('clean') */
new (require('C:\\Users\\Ed\\src\\neutrino\\node_modules\\clean-webpack-plugin\\index.js'))(
[
'C:\\Users\\Ed\\src\\test-project\\build'
],
{
root: 'C:\\Users\\Ed\\src\\test-project',
verbose: false,
allowExternal: false,
dry: false
}
)
],
entry: {
index: [
'C:\\Users\\Ed\\src\\test-project\\src\\index'
]
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment