在汇总中链接 PostCSS 和 SASS 的正确方法
Proper way to chain PostCSS and SASS in rollup
我正在尝试设置汇总以同时使用 SCSS 样式表和 Lost 网格系统,这需要通过 PostCSS 进行解析。我已经验证 SCSS 被正确解析,但 PostCSS 处理器似乎没有任何效果。
根据rollup-plugin-sass
docs,我只需要将vanilla JS函数传入processor
选项即可。这没有错误,但生成的 CSS 没有什么不同。
这是我的汇总配置,使用 rollup -c config/dev.js
:
调用
// Rollup plugins.
import babel from 'rollup-plugin-babel';
import cjs from 'rollup-plugin-commonjs';
import globals from 'rollup-plugin-node-globals';
import replace from 'rollup-plugin-replace';
import resolve from 'rollup-plugin-node-resolve';
import sass from 'rollup-plugin-sass';
import postcss from 'postcss';
const postcssProcessor = postcss([require('autoprefixer'), require('lost')]);
export default {
dest: 'dist/app.js',
entry: 'src/index.jsx',
format: 'iife',
plugins: [
resolve({
browser: false,
main: true
}),
sass({
// processor: postcssProcessor,
output: 'dist/styles.css'
}),
babel({
babelrc: false,
exclude: 'node_modules/**',
presets: [ 'es2015-rollup', 'stage-0', 'react' ],
plugins: [ 'external-helpers' ]
}),
cjs({
exclude: 'node_modules/process-es6/**',
include: 'node_modules/**'
}),
globals(),
replace({ 'process.env.NODE_ENV': JSON.stringify('development') })
],
sourceMap: true
};
取消注释 processor
行无效。它应该将 lost-column
行转换为 calc
指令,并将供应商前缀添加到需要它们的 CSS 属性。
正确的做法是什么?
这是我使用的有效配置:
import sass from 'rollup-plugin-sass'
import autoprefixer from 'autoprefixer'
import postcss from 'postcss'
sass({
processor: css => postcss([autoprefixer])
.process(css)
.then(result => result.css)
})
你也可以反过来,使用 sass 作为 rollup-plugin-postcss
:
的预处理器
import sass from 'node-sass'
import autoprefixer from 'autoprefixer'
import postcss from 'rollup-plugin-postcss'
export default {
entry: 'src/app.js',
dest: 'dist/bundle.js',
format: 'iife',
sourceMap: true,
plugins: [
postcss({
preprocessor: (content, id) => new Promise((resolve, reject) => {
const result = sass.renderSync({ file: id })
resolve({ code: result.css.toString() })
}),
plugins: [
autoprefixer
],
sourceMap: true,
extract: true,
extensions: ['.sass','.css']
})
]
}
查看 rollup-plugin-styles 插件,它处理各种预处理器,包括 Sass(同时使用已弃用的 node-sass 和推荐的 sass),以及具有内置的 PostCSS 支持。
这既解决了问题作者的问题,也解决了将参数传递给自动前缀器的问题——与使用 WebPack 时的方式相同:
import styles from 'rollup-plugin-styles';
import autoprefixer from 'autoprefixer';
export default {
plugins: [ // rollup plugins
styles ({
plugins: [autoprefixer({/* your options */})], // postcss plugins
}),
],
};
我正在尝试设置汇总以同时使用 SCSS 样式表和 Lost 网格系统,这需要通过 PostCSS 进行解析。我已经验证 SCSS 被正确解析,但 PostCSS 处理器似乎没有任何效果。
根据rollup-plugin-sass
docs,我只需要将vanilla JS函数传入processor
选项即可。这没有错误,但生成的 CSS 没有什么不同。
这是我的汇总配置,使用 rollup -c config/dev.js
:
// Rollup plugins.
import babel from 'rollup-plugin-babel';
import cjs from 'rollup-plugin-commonjs';
import globals from 'rollup-plugin-node-globals';
import replace from 'rollup-plugin-replace';
import resolve from 'rollup-plugin-node-resolve';
import sass from 'rollup-plugin-sass';
import postcss from 'postcss';
const postcssProcessor = postcss([require('autoprefixer'), require('lost')]);
export default {
dest: 'dist/app.js',
entry: 'src/index.jsx',
format: 'iife',
plugins: [
resolve({
browser: false,
main: true
}),
sass({
// processor: postcssProcessor,
output: 'dist/styles.css'
}),
babel({
babelrc: false,
exclude: 'node_modules/**',
presets: [ 'es2015-rollup', 'stage-0', 'react' ],
plugins: [ 'external-helpers' ]
}),
cjs({
exclude: 'node_modules/process-es6/**',
include: 'node_modules/**'
}),
globals(),
replace({ 'process.env.NODE_ENV': JSON.stringify('development') })
],
sourceMap: true
};
取消注释 processor
行无效。它应该将 lost-column
行转换为 calc
指令,并将供应商前缀添加到需要它们的 CSS 属性。
正确的做法是什么?
这是我使用的有效配置:
import sass from 'rollup-plugin-sass'
import autoprefixer from 'autoprefixer'
import postcss from 'postcss'
sass({
processor: css => postcss([autoprefixer])
.process(css)
.then(result => result.css)
})
你也可以反过来,使用 sass 作为 rollup-plugin-postcss
:
import sass from 'node-sass'
import autoprefixer from 'autoprefixer'
import postcss from 'rollup-plugin-postcss'
export default {
entry: 'src/app.js',
dest: 'dist/bundle.js',
format: 'iife',
sourceMap: true,
plugins: [
postcss({
preprocessor: (content, id) => new Promise((resolve, reject) => {
const result = sass.renderSync({ file: id })
resolve({ code: result.css.toString() })
}),
plugins: [
autoprefixer
],
sourceMap: true,
extract: true,
extensions: ['.sass','.css']
})
]
}
查看 rollup-plugin-styles 插件,它处理各种预处理器,包括 Sass(同时使用已弃用的 node-sass 和推荐的 sass),以及具有内置的 PostCSS 支持。 这既解决了问题作者的问题,也解决了将参数传递给自动前缀器的问题——与使用 WebPack 时的方式相同:
import styles from 'rollup-plugin-styles';
import autoprefixer from 'autoprefixer';
export default {
plugins: [ // rollup plugins
styles ({
plugins: [autoprefixer({/* your options */})], // postcss plugins
}),
],
};