Skip to content

Commit

Permalink
generate separate CSS bundle for Netlify CMS plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
erquhart committed Jan 19, 2018
1 parent 50b0a47 commit ec93db3
Showing 1 changed file with 58 additions and 22 deletions.
80 changes: 58 additions & 22 deletions packages/gatsby-plugin-netlify-cms/src/gatsby-node.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,70 @@
const HtmlWebpackPlugin = require(`html-webpack-plugin`)
const HtmlWebpackIncludeAssetsPlugin = require(`html-webpack-include-assets-plugin`)
const ExtractTextPlugin = require(`extract-text-webpack-plugin`)

function plugins(stage) {
const commonPlugins = [
// Output /admin/index.html
new HtmlWebpackPlugin({
title: `Content Manager`,
filename: `admin/index.html`,
chunks: [`cms`],
}),

// Include the identity widget script in the html file
new HtmlWebpackIncludeAssetsPlugin({
assets: [`https://identity.netlify.com/v1/netlify-identity-widget.js`],
append: false,
publicPath: false,
}),
]

exports.modifyWebpackConfig = (
{ config, stage },
{ modulePath = `${__dirname}/cms.js` }
) => {
switch (stage) {
case `develop`:
return commonPlugins
case `build-javascript`:
return [...commonPlugins, new ExtractTextPlugin(`cms.css`)]
default:
return []
}
}

function module(config, stage) {
switch (stage) {
case `build-javascript`:
config.merge({
entry: {
cms: modulePath,
},
plugins: [
new HtmlWebpackPlugin({
title: `Content Manager`,
filename: `admin/index.html`,
chunks: [`cms`],
}),
new HtmlWebpackIncludeAssetsPlugin({
assets: [
`https://identity.netlify.com/v1/netlify-identity-widget.js`,
],
append: false,
publicPath: false,
}),
],
// Exclude Netlify CMS styles from Gatsby CSS bundle. This relies on
// Gatsby using webpack-configurator for webpack config extension, and
// also on the target loader key being named "css" in Gatsby's webpack
// config.
config.loader(`css`, {
exclude: [/\/node_modules\/netlify-cms\//],
})

// Exclusively extract Netlify CMS styles to /cms.css (filename configured
// above with plugin instantiation).
config.loader(`cms-css`, {
test: /\.css$/,
include: [/\/node_modules\/netlify-cms\//],
loader: ExtractTextPlugin.extract([`css`]),
})
return config
default:
return config
}
}

exports.modifyWebpackConfig = (
{ config, stage },
{ modulePath = `${__dirname}/cms.js` }
) => {
config.merge({
entry: {
cms: modulePath,
},
plugins: plugins(stage),
})

module(config, stage)

return config
}

0 comments on commit ec93db3

Please sign in to comment.