0

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

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

4

1 回答 1

0

这实际上是 node-sass 的一个错误,现在已修复

于 2016-12-13T12:21:15.873 回答