javascript - Autoprefixer 导致 node-sass 源映射指向错误的文件
问题描述
我构建了一个自定义 Node 脚本,它在 JS 中手动完成我的所有 SCSS 处理,而不是通过命令行或使用 webpack。
过程如下:
- 观察 .scss 文件的变化。
- 在更改时,将 SCSS 编译为 CSS 并
node-sass
同时生成源映射node-sass
。 - 使用 `fs.writeFile()写入
screen.css
and文件screen.css.map
- 对于该
screen.css
文件,然后我重新读取它fs.readFile
以获取缓冲区,并通过postcss
使用autoprefixer
插件运行 CSS 内容以自动为所有 CSS 添加前缀。然后我再次使用重新编写fs.writeFile
它,最后使用jsftp
. 同时,screen.css.map
文件的处理过程是完全一样的,只是我没有运行它postcss
,我只是重新读取它并在初始写入后将它上传到服务器。
我的问题
如果我autoprefixer
在使用时包含插件postcss
,例如:
postcss([autoprefixer]).process(buffer, {
from: "assets/css/screen.css",
to: "assets/css/screen.css"
}).then(result => {...})
在浏览器中检查时,源映射完全错误,不仅指向错误的行,还指向错误的文件。
例如,页面横幅的 SCSS 是 in _banner.scss
,但 sourcemap 告诉我它全部是 in _calendar.scss
。
但是,如果我保持所有代码完全相同但省略autoprefixer
,例如:
postcss([]).process(buffer, {
from: "assets/css/screen.css",
to: "assets/css/screen.css"
}).then(result => {...})
源图完美地工作,正确地指向我_banner.scss
所有的横幅样式。
有没有人知道如何解决这个问题并让我的 SCSS 源图在仍然使用 autoprefixer 的同时工作?
在这里链接到 SCSS 处理节点脚本的完整源代码,忽略可怕的嵌套,这只是一个早期版本 :) https://github.com/JJGerrish/twk-boilerplate/blob/master/template/style.js
解决方案
对于任何需要它的人,我找到了解决方法。
基本上,postcss
可以选择检测以前的源映射并将其用于自己的源映射,而不是生成新的源映射。
我在 GitHub 问题上找到了这个解决方案,它对我有用,基本上,你必须获取node-sass
生成的源映射,对其进行字符串化,然后将其传递给postcss
map
选项对象。
https://github.com/postcss/postcss/issues/222#issuecomment-318136962
万一链接下面的代码消失了:
postcss([autoprefixer])
.process(result.css, {
from: "assets/css/screen.css",
to: "assets/css/screen.css",
map: {
prev: result.map.toString(),
inline: false,
},
})
.then(result => {...})
推荐阅读
- c++ - Cross Compiling in c++ (as part of an cross platform application or as service)
- google-apps-script - Google App Scripts what is a 'paged' call?
- spring - Displaying data from h2 database in a list
- ansible - Trouble passing Ansible dictionary to template
- asp.net - How can I setup attribute based routing in ASP.NET Core 3.0
- java - How to use Java Stream API to iterate through a HashMap with custom object
- shiny - Shinydashboard:tabBox 内的 tabPanel 侧边栏
- ionic4 - 如何在另一个离子应用程序中运行离子应用程序
- spring-boot - 如何将 Spring Boot Web 应用程序服务器配置为服务器外部内容以及使用默认资源目录?
- php - 当域在php中重复时防止日志?