在 React 项目中用与平台无关的 SASS 编译器替换 node-sass

Posted

技术标签:

【中文标题】在 React 项目中用与平台无关的 SASS 编译器替换 node-sass【英文标题】:Replace node-sass by a platform agnostic SASS compiler in a React project 【发布时间】:2017-12-16 11:53:47 【问题描述】:

我们是一个由大约 6 名开发人员组成的团队,具有异构设置(Windows 10、Ubuntu、macOS),并已开始使用 React 进行开发。

在 Linux/macOS 和 Windows 之间编写脚本很痛苦,因此我们决定使用 Bash for Windows 来运行我们的构建。一旦你正确设置了 Bash,它就可以很好地工作,并且与 VS Code 的集成非常好。 但是有一个很大的问题:每当你想在 Bash 之外(使用 CMD 或 PowerShell)更新你的项目时,你实际上是在切换你的操作系统,然后你会从节点收到一个很好的错误-sass 说your environment has changed。

由于重建 node-sass 根本无法正常工作,我们发现解决此问题的唯一方法是删除或重命名 node_modules 并再次运行 npm install,但这非常耗时/耗费资源。

我们已经看到它看起来像there is a native js alternative,但我们想看看是否有人遇到过同样的情况并找到了合适的解决方案。

我们真的没有海量的 SASS 文件,所以我们不太关心性能(这是在 C++ 中使用 libSass 进行处理的要点)。

注意:我们不能总是在 Windows 上使用 Bash,因为我们在一些运行 npm 构建的 Java / React 应用程序中有一些混乱的 Maven 集成,而这将始终在 Windows 中。

【问题讨论】:

只是为了分享我们的“解决方案”:我们开始使用 Material-UI 并放弃了 SASS(使用该库后的几行 CSS 不需要)。 【参考方案1】:

我们在应用程序中使用了 Angular 6 前端并且遇到了同样的问题。我们通过将所需的二进制文件签入存储库并使用不同的 Maven 配置文件(每个环境/操作系统一个,默认为我们的 CI 的 linux)将 sass-binary-path 设置为其环境特定的二进制文件来解决它。但是,它仅在您拥有能够设置环境变量的构建系统时才有效。另一个需要注意的是,您必须手动更新二进制文件。

<properties>
    <sass.binary.path.base>$basedir/node-sass-binaries/</sass.binary.path.base>
</properties>
...
<profile>
  <id>linux</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <properties>
    <sass.binary.path>$sass.binary.path.base/linux-x64-64_binding.node</sass.binary.path>
  </properties>
</profile>
<profile>
  <id>windows</id>
  <properties>
    <sass.binary.path>$sass.binary.path.base/win32-x64-64_binding.node</sass.binary.path>
  </properties>
</profile>
<profile>
  <id>mac</id>
  <properties>
    <sass.binary.path>$sass.binary.path.base/darwin-x64-64_binding.node</sass.binary.path>
  </properties>
</profile>

【讨论】:

很好,我没想到!我只是没有将其标记为“已解决”,因为对我来说,解决方案是拥有一个可能不太优化但我不关心的编译器,它可以在每个操作系统上运行。但同时这是一个有效的解决方案。【参考方案2】:

一种选择是使用一些 PostCSS 插件:PreCSS & postcss-preset-env。有一篇很好的简短文章here for the transition。

我自己没有这样做;但研究这样做是为了一个大型项目。我看过一些有 SASS 表示法的项目,然后注意到他们只使用 PostCSS+插件,避免了 node-sass 混乱。 只是传递信息。

【讨论】:

感谢您的信息!我们最终使用了 JSS (cssinjs.org),因为我们使用的是 material-ui,它工作得很好:)

以上是关于在 React 项目中用与平台无关的 SASS 编译器替换 node-sass的主要内容,如果未能解决你的问题,请参考以下文章

react 创建sass router mobx项目

结对编程项目作业-结对编项目设计文档

iOS - 存档项目与任何已知的 iTunes Connect 平台无关

如何在react项目中使用sass

WebPack在React项目架构中的应用实践

将 Bulma/Sass 与 Django 集成