PostCSS cli在解释源图时遇到stdin的最大行长度

时间:2016-12-01 13:24:59

标签: node.js bash npm postcss npm-scripts

我的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' ) );
}

控制台输出是一个不完整的文件

1 个答案:

答案 0 :(得分:0)

这实际上是node-sass的一个错误,即now fixed