我的 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,这是源映射完全使用此方法所必需的,因为如果 node-sass 将输出管道输出到 stdout,它似乎不会将它们写入文件.
我猜 dataUri 已经很长了,它达到了某种最大行长度。我不确定这个限制是在 bash(我在 Mac OSX 上)、node.js 还是 postcss-cli 中?是我可以手动增加的东西,还是有其他解决方法?
更新:
经过进一步研究,问题似乎源于read-file-stdin,它从 process.stdin 返回一个不完整的文件。我对节点流不太熟悉,但read-file-stdin
依赖于stream.pipe
读取数据,我相信使用gather-stream将流块收集在一起。但是,这是行不通的。如果我将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' ) );
}
控制台输出是一个不完整的文件