package.json で次のように sass コンパイルをセットアップしました。
"scripts": {
"sass": "node-sass sass/app.scss --source-map-root file://${PWD}/ --source-map-embed true",
"postcss:autoprefixer": "postcss --use autoprefixer -b 'last 2 versions' --map",
"css": "npm run sass -s | npm run postcss:autoprefixer -s | exorcist css/app.css.map > css/app.css"
}
これは、しばらくの間、外部ソースマップを作成するために正常に実行されています。ただし、最近、postcss がクローズされていないコメント エラーをスローして失敗しています。問題のコメントは、sourceMappingURL への開始タグです。sourceMappingURL は、node-sass によって--source-map-embed true
コマンドを使用して dataUri として埋め込まれています。これは、出力を stdout にパイプしている場合、node-sass がそれらをファイルに書き込まないように見えるため、ソース マップがこのメソッドでまったく機能するために必要です。 .
dataUri が長すぎて、ある種の最大行長に達していると思います。この制限が bash (私は Mac OSX を使用しています)、node.js、または postcss-cli にあるのかどうかはわかりません。手動で増やすことができるものですか、それとも他の回避策はありますか?
更新:さらに調査した結果、この問題は、process.stdin から不完全なファイルを返すread-file-stdin
に起因するようです。私はノード ストリームにあまり詳しくありませんが、データの読み取りにread-file-stdin
依存しており、ストリーム チャンクを一緒に収集するためにgather-streamを使用していると思います。ただし、これは機能していません。スクリプトを次のように変更すると、次の場所は次のとおりです。stream.pipe
css
npm run sass -s | test.js
test.js
#!/usr/bin/env node
const gather = require( 'gather-stream' );
process.stdin.pipe( gather( complete ) );
function complete ( err, data ) {
console.log( data.toString( 'utf8' ) );
}
コンソール出力は不完全なファイルです