一条简单的命令就可以将 stylus 语法转换为 scss 语法

2020-02-26 20:16:49

一条简单的命令就可以将 stylus 语法转换为 scss 语法

因为早期有个项目用到了 stylus,stylus 开发起来很爽,但 stylus 基于缩进的代码在修改的时候不是很方便,加上所在团队开发使用的都是 SCSS ,为了便于维护和统一,准备将项目中的 stylus 替换成 SCSS。手动转换 stylus 浪费时间,且出错率大,当时在想也许别人也有这样的需求呢,所以就做了这样一个项目。请各位大佬动动你们发财的小手,给我点个 star,不胜感激。^_^

stylus-converter 配置

converter 配置

参数说明类型可选值默认值
quote转换中遇到字符串时,使用的引号类型string' / "'
conver转换类型,例如转换成 scss 语法stringscssscss
autoprefixer是否自动添加前缀,stylus 在转换 css 语法的时候,有些语法会自动添加前缀例如 @keyframesbooleantrue / falsetrue
indentVueStyleBlock在 .vue 文件中转换 stylus 时,可以添加一定数量的缩进,默认不添加缩进。numbernumber0

cli 配置

参数简写说明可选值默认值
--quote-q转换中遇到字符串时,使用的引号类型single / dobulesingle
--input-i输入名称,可以是文件或者是文件夹的路径--
--output-o输出名称,可以是文件或者是文件夹的路径--
--conver-c转换类型,例如转换成 scss 语法scssscss
--directory-d输入和输出路径是否是个目录yes / nono
--autoprefixer-p是否添加前缀yes / noyes
--indentVueStyleBlock-v在 .vue 文件中转换 stylus 时,可以添加一定数量的缩进,默认不添加缩进。number0

如何处理单行注释。

1. 先 fork 项目再 clone 项目到本地 git clone git@github.com:<your github>/stylus-converter.git 2. 进入项目目录 cd stylus-converter 3. 安装项目依赖 npm install 4. 进入 `node_modules/stylus/lib/lexer.js` 文件第 581 行。 5. 修改下列代码。 // 修改前 if ('/' == this.str[0] && '/' == this.str[1]) {   var end = this.str.indexOf('\n');   if (-1 == end) end = this.str.length;   this.skip(end);   return this.advance(); }  // 修改后 if ('/' == this.str[0] && '/' == this.str[1]) {   var end = this.str.indexOf('\n');   const str = this.str.substring(0, end)   if (-1 == end) end = this.str.length;   this.skip(end);   return new Token('comment', new nodes.Comment(str, suppress, true)) }

使用示例

// 下载 stylus-converter npm install -g stylus-converter // 运行 cli 转换文件 stylus-conver -i test.styl -o test.scss // 运行 cli 转换目录 // 先进入项目目录 mv src src-temp stylus-conver -d yes -i src-temp -o src

转换文件比较

转换前的 stylus 源码

handleParams(args...)   args @media screen and (max-width: 500px) and (min-width: 100px), (max-width: 500px) and (min-height: 200px)   .foo     color: #100 .foo   for i in 1..4     @media (min-width: 2 * (i + 7) px)

转换后的 SCSS 源码

@function handleParams($args...) {   @return $args; } @media screen and (max-width: 500px) and (min-width: 100px), (max-width: 500px) and (min-height: 200px) {   .foo {     color: #100;   } } .foo {   @for $i from 1 through 4 {     @media (min-width: 2 * ($i + 7) px) {       width: 100px * $i;     }   } }

如果你不想你转换的 @keyframes 添加默认前缀,请设置 options.autoprefixer = false

转换前的 .vue 文件

<template>   <div class="page-home">     <el-button>click me</el-button>   </div> </template> <style lang="stylus"> .page-home   .el-button     margin: 10px auto </style>

转换后的 .vue 文件

<template>   <div class="page-home">     <el-button>click me</el-button>   </div> </template> <style lang="scss"> .page-home {   .el-button {     margin: 10px auto;   } } </style>

搭建开发环境

1. 先 fork 项目再 clone 项目到本地 git clone git@github.com:<your github>/stylus-converter.git 2. 进入项目目录 cd stylus-converter 3. 安装项目依赖 npm install 4. 打包编译源文件 npm run build 5. 本地调试 cli npm link


  • 2021-02-03 16:57:34

    iOS中的动态库和静态库分析

    由于最近研究组件化后调试时二进制映射源码的功能,发现需要对开发中的动态库和静态库需要有一些了解。所以就有了这篇文章,由于只是了解,并没有深入到编译层面,所以本篇文章只是简单了解一些库的知识,并不深入。

  • 2021-02-03 16:58:39

    iOS静态库与动态库的区别与打包

    这篇主要是记录一下 iOS 下静态库与动态库的打包流程,以便以后用到时快速查阅,供自己也供大家学习记录。同时也简述了一下 动态库 与 静态库 的区别。

  • 2021-02-03 16:59:59

    iOS 静态库和动态库全分析

    库就是程序代码的集合,将 N 个文件组织起来,是共享程序代码的一种方式。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。

  • 2021-02-03 17:01:30

    iOS库 .a与.framework区别

    静态库:连接时完整地拷贝至可执行文件中,被屡次使用就有多份冗余拷贝。 动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

  • 2021-02-03 17:13:58

    iOS - 封装静态库

    静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝,.a的静态库 .framework的静态库

  • 2021-02-03 17:16:07

    iOS 中的动态库、静态库和 framework

    首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间。

  • 2021-02-03 17:17:53

    iOS 同一个工程下打包不同的app

    应用图标,启动画面,应用启动后的首页都不一样。 有些课程(例如公务员考试和高考)是有目标考试的概念,不同的目标考试大纲是不一样的。拿高考来举例,北京的高考和上海的高考,就有着完全不一样的考试大纲。高考的文科和理科,又有着完全不同的考试科目。 有些课程会有一些自定义的界面,例如高考的应用可以设置昵称,有些课程的真题练习中是有推荐真题模块的,而有些课程又没有。 有些课程有扫描答题卡功能,有些课程有考前冲刺功能,有些课程有大题专项查看功能,而有些课程又没有上述功能。另外还有一些微小细节,但是解决方法和类似,所以就不一一展开说明。

  • 2021-02-04 14:02:30

    window软件界面找不到了跑到屏幕外面去了

    一般可以这样操作,按Alt+空格,然后按M,然后用上下左右键把窗口移动到能看到的地方,再按回车。有些第三方的软件可能不能用,大部分都可以这样做。

  • 2021-02-04 14:08:13

    基于 Electron 的爬虫框架 Nightmare

    Electron 可以让你使用纯 JavaScript 调用 Chrome 丰富的原生的接口来创造桌面应用。你可以把它看作一个专注于桌面应用的 Node.js 的变体,而不是 Web 服务器。其基于浏览器的应用方式可以极方便的做各种响应式的交互,接下来介绍下关于 Electron 上衍生出的框架 Nightmare