postcss docsによるとResult
、CSS の文字列に対して ( を使用して) プラグインを実行するのと同じ方法で、postcss オブジェクトに対してプラグインを実行できるはずProcessor.process
です。
残念ながら、これはうまくいかないようです。この「バグ」については、こちらで説明しました(便宜上、以下のコードもコピーしました)。そのリンクをクリックしてブラウザのコンソールを開き、[コードを実行] をクリックしてテストを実行するだけです。
私の質問は次のとおりです。これは機能しないため、postcssResult
オブジェクトに対して直接 postcss プラグインを実行するにはどうすればよいですか?
問題を示すテスト コード
まず、postcss、プラグイン、およびテスト ハーネスが必要です
var postcss = require('postcss')
var cssnext = require('postcss-cssnext')
var test = require('tape')
次に、いくつかの入力 css と、プラグインの実行から期待される出力を定義します
var input = 'body { color: rebeccapurple; }'
var expected = 'body { color: rgb(102, 51, 153); }'
そして今、テスト自体:
1: 通常の使用、プラグインが期待どおりに動作することを証明
test('cssnext', function (t) {
t.plan(1)
postcss([cssnext]).process(input).then(function (result) {
t.equals(result.css, expected, 'produces the expected result')
})
})
このテストは合格します:
ok 1 produces the expected result
Result
2: ドキュメントで定義されているメソッドを使用して、プラグインをオブジェクトに直接適用します
test('running plugins against a Result object (1)', function (t) {
t.plan(1)
// first run without plugins to get a Result object
postcss([]).process(input).then(function (result) {
postcss([cssnext]).process(result)
.then(function () {
t.equals(result.css, expected, 'produces the same result')
})
})
})
このテストは失敗します:
not ok 2 produces the same result
---
operator: equal
expected: |-
'body { color: rgb(102, 51, 153); }'
actual: |-
'body { color: rebeccapurple; }'
...
3: 別の試み、手動でプラグイン機能を実行
test('running plugins against a Result object (2)', function (t) {
t.plan(1)
// first run without plugins to get a Result object
postcss([]).process(input).then(function (result) {
Promise.resolve(cssnext(result.root, result))
.then(function () {
t.equals(result.css, expected, 'produces the same result')
})
})
})
このテストも失敗します。
not ok 3 produces the same result
---
operator: equal
expected: |-
'body { color: rgb(102, 51, 153); }'
actual: |-
'body { color: rebeccapurple; }'
...