web-dev-qa-db-ja.com

ロールアップでPostCSSとSASSをチェーンする適切な方法

SCSSスタイルシートとLostグリッドシステムの両方を使用するようにロールアップを設定しようとしています。これはPostCSSを介して解析する必要があります。 SCSSが正しく解析されていることを確認しましたが、PostCSSプロセッサは効果がないようです。

rollup-plugin-sass docs によると、VanillaJS関数を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プロパティに追加する必要があります。

これを行う正しい方法は何ですか?

11
bright-star

これは私が使用する作業構成です:

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)
})
7
nathancahill

rollup-plugin-postcssのプリプロセッサとしてsassを使用することで、逆の方法でアプローチすることもできます。

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']
    })
  ]
}
15
coussej