Skip to content

Instantly share code, notes, and snippets.

@11111000000
Created January 27, 2018 10:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 11111000000/81954a4c95e354ecb6e678758c4207b0 to your computer and use it in GitHub Desktop.
Save 11111000000/81954a4c95e354ecb6e678758c4207b0 to your computer and use it in GitHub Desktop.
Моя настройка Neutrino
module.exports = {
use: [
'neutrino-middleware-env',
'neutrino-preset-web',
'neutrino-preset-react',
'neutrino-preset-visualizer',
'neutrino-middleware-hot',
['neutrino-middleware-postcss', {
plugins: [
require('postcss-partial-import')(),
require('postcss-custom-media')(),
require('postcss-mixins')(),
require('postcss-nesting')(),
require('postcss-nested')(),
require('postcss-simple-vars'),
require('postcss-fixes')(),
require('postcss-flexbugs-fixes')(),
require('postcss-responsive-type')(),
//require('postcss-grid-kiss'),
// require('postcss-inline-svg')(),
// require('postcss-image-inliner')(),
//require('postcss-atroot')()
require('autoprefixer')()
]
}],
neutrino => {
neutrino.config
.output.publicPath('/')
neutrino.config
.output.filename('[name].[hash].js')
neutrino.config
.entry('vendor')
.add('react')
.add('react-dom')
.add('react-hot-loader')
// .add('css-hot-loader')
.add('react-router-dom')
.add('react-async-component')
.end()
if (process.env.NODE_ENV != 'production') {
neutrino.config
.entry('index')
.add('webpack-dev-server/client')
.add('webpack/hot/dev-server')
}
neutrino.config
.resolve
.modules
.add(__dirname + '/src')
.end()
.extensions
.add('.mdx')
neutrino.config
.plugin('provide')
.use(webpack.ProvidePlugin, [{
debug: 'debug',
React: 'react',
Img: ['react-image', 'default'],
Image: ['modules/image', 'default'],
lifecycle: 'react-functional-lifecycle'
}])
neutrino.config
.plugin('define')
.use(webpack.DefinePlugin, [{
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
RANDOM: JSON.stringify((Math.random() + 1).toString(36).substring(7)),
RECAPTCHA_SITE_KEY: JSON.stringify(cfg.recaptchaSiteKey),
CAP_URLS: JSON.stringify(cfg.cap_urls),
}])
neutrino.config
.plugin('analyzer')
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [{
reportFilename: 'analyze.html',
analyzerMode: 'static',
openAnalyzer: false,
logLevel: 'silent'
}])
neutrino
.use(require('neutrino-middleware-copy'), {
patterns: [
{ from: 'src/modules/assets/static', to: 'static' },
],
options: {}
})
neutrino.config.module
.rule('markdown')
.test(/\.md$/)
.use('html')
.loader(require.resolve('html-loader'))
.end()
.use('markdown')
.loader(require.resolve('markdown-loader'))
.options({
gfm: true,
tables: true,
smartypants: true
//templates: componentTemplates.component
})
.end()
neutrino.config
.module
.rule('compile')
.test(/(\.jsx?|\.mdx)$/)
neutrino.config.module
.rule('mdx')
.test(/\.mdx$/)
.use('mdx-loader')
.loader(require.resolve('mdx-loader'))
.options({})
.end()
let HtmlTemplatePlugin_options = {
template: 'src/modules/template/index.ejs',
inject: false,
appMountId: 'root',
xhtml: true,
mobile: true,
minify: {
useShortDoctype: true,
keepClosingSlash: true,
collapseWhitespace: true,
preserveLineBreaks: true
},
meta: cfg.meta,
lang: cfg.lang,
links: cfg.links,
title: cfg.title,
}
if ((process.env.NODE_ENV === 'production') || (process.env.NODE_ENV === 'analytics-dev')) {
HtmlTemplatePlugin_options.analytics = analytics;
}
neutrino.use(require('neutrino-middleware-html-template'), HtmlTemplatePlugin_options)
if (process.env.NODE_ENV === 'production') {
// default neutrino babili plugin was > 10x slower
neutrino.config
.plugin('minify')
.use(require('uglifyjs-webpack-plugin'), [{ parallel: true }])
neutrino.config.plugin('merging')
.use(webpack.optimize.AggressiveMergingPlugin, [])
neutrino
.use('neutrino-middleware-compression', {
asset: '[path].gz[query]',
algorithm: 'gzip',
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8
})
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment