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