diff --git a/packages/slate-tools/cli/commands/build.js b/packages/slate-tools/cli/commands/build.js index 433d6ff2b..d7c4586bf 100755 --- a/packages/slate-tools/cli/commands/build.js +++ b/packages/slate-tools/cli/commands/build.js @@ -1,3 +1,7 @@ +// Set NODE_ENV so slate.config.js can return different values for +// production vs development builds +process.env.NODE_ENV = 'production'; + /* * Run Webpack with the webpack.prod.conf.js configuration file. Write files to disk. * diff --git a/packages/slate-tools/cli/commands/start.js b/packages/slate-tools/cli/commands/start.js index 905b0dbd3..474ff5c9f 100644 --- a/packages/slate-tools/cli/commands/start.js +++ b/packages/slate-tools/cli/commands/start.js @@ -1,3 +1,7 @@ +// Set NODE_ENV so slate.config.js can return different values for +// production vs development builds +process.env.NODE_ENV = 'development'; + const argv = require('minimist')(process.argv.slice(2)); const figures = require('figures'); const chalk = require('chalk'); diff --git a/packages/slate-tools/slate-tools.schema.js b/packages/slate-tools/slate-tools.schema.js index 460fb03f1..28ebdcd87 100644 --- a/packages/slate-tools/slate-tools.schema.js +++ b/packages/slate-tools/slate-tools.schema.js @@ -1,5 +1,7 @@ const path = require('path'); const os = require('os'); +const autoprefixer = require('autoprefixer'); +const cssnano = require('cssnano'); const commonPaths = require('@shopify/slate-config/common/paths.schema'); module.exports = { @@ -70,11 +72,15 @@ module.exports = { // Extends webpack development config using 'webpack-merge' // https://www.npmjs.com/package/webpack-merge - 'webpack.config.extend.dev': {}, + 'webpack.extend': {}, - // Extends webpack production config using 'webpack-merge' - // https://www.npmjs.com/package/webpack-merge - 'webpack.config.extend.prod': {}, + 'webpack.postcss.plugins': (config) => [ + autoprefixer, + + process.env.NODE_ENV === 'production' + ? cssnano(config.get('webpack.cssnano.settings')) + : null, + ], // Optimization settings for the cssnano plugin 'webpack.cssnano.settings': {zindex: false, reduceIdents: false}, diff --git a/packages/slate-tools/tools/webpack/config/__tests__/dev.test.js b/packages/slate-tools/tools/webpack/config/__tests__/dev.test.js index 39fd9c9d5..0c16bf1b5 100644 --- a/packages/slate-tools/tools/webpack/config/__tests__/dev.test.js +++ b/packages/slate-tools/tools/webpack/config/__tests__/dev.test.js @@ -1,6 +1,6 @@ -test(`merges contents of 'webpack.config.extend.dev' into webpack config`, () => { +test(`merges contents of 'webpack.extend' into webpack config`, () => { global.slateUserConfig = { - 'webpack.config.extend.dev': {some: 'value'}, + 'webpack.extend': {some: 'value'}, }; jest.mock('../parts/core', () => { @@ -18,8 +18,6 @@ test(`merges contents of 'webpack.config.extend.dev' into webpack config`, () => require('../dev'); expect(merge).toBeCalledWith( - expect.arrayContaining([ - global.slateUserConfig['webpack.config.extend.dev'], - ]), + expect.arrayContaining([global.slateUserConfig['webpack.extend']]), ); }); diff --git a/packages/slate-tools/tools/webpack/config/__tests__/prod.test.js b/packages/slate-tools/tools/webpack/config/__tests__/prod.test.js index 0c21ec0e0..8c7ae5e3a 100644 --- a/packages/slate-tools/tools/webpack/config/__tests__/prod.test.js +++ b/packages/slate-tools/tools/webpack/config/__tests__/prod.test.js @@ -1,6 +1,6 @@ -test(`merges contents of 'webpack.config.extend.prod' into webpack config`, () => { +test(`merges contents of 'webpack.extend' into webpack config`, () => { global.slateUserConfig = { - 'webpack.config.extend.prod': {some: 'value'}, + 'webpack.extend': {some: 'value'}, }; jest.mock('../parts/core'); @@ -16,8 +16,6 @@ test(`merges contents of 'webpack.config.extend.prod' into webpack config`, () = require('../prod'); expect(merge).toBeCalledWith( - expect.arrayContaining([ - global.slateUserConfig['webpack.config.extend.prod'], - ]), + expect.arrayContaining([global.slateUserConfig['webpack.extend']]), ); }); diff --git a/packages/slate-tools/tools/webpack/config/dev.js b/packages/slate-tools/tools/webpack/config/dev.js index 364896e09..e42a32d8f 100755 --- a/packages/slate-tools/tools/webpack/config/dev.js +++ b/packages/slate-tools/tools/webpack/config/dev.js @@ -2,12 +2,13 @@ const path = require('path'); const webpack = require('webpack'); const merge = require('webpack-merge'); const HtmlWebpackPlugin = require('html-webpack-plugin'); -const autoprefixer = require('autoprefixer'); + const SlateConfig = require('@shopify/slate-config'); const core = require('./parts/core'); const babel = require('./parts/babel'); const entry = require('./parts/entry'); +const sass = require('./parts/sass'); const commonExcludes = require('./utilities/common-excludes'); const getLayoutEntrypoints = require('./utilities/get-layout-entrypoints'); @@ -26,6 +27,7 @@ module.exports = merge([ core, entry, babel, + sass, { mode: 'development', @@ -44,35 +46,6 @@ module.exports = merge([ }, ], }, - { - test: /\.s[ac]ss$/, - exclude: commonExcludes(), - use: [ - { - loader: 'style-loader', - options: { - hmr: true, - }, - }, - { - loader: 'css-loader', - // Enabling sourcemaps in styles causes style-loader to inject - // styles using a tag instead of