我的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不会将它们写入文件如果它是管道输出到标准输出。
我猜测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' ) );
}
控制台输出是一个不完整的文件