HbuilderX格式化scss、less文件

文章目录

HbuilderX自带了jsbeautify插件以进行代码格式化。然而当我们尝试新建外部CSS文件以分割过长组件代码时会发现,以scss或less为后缀的样式表文件无法正确地被格式化。解决该问题的方法有两种:

  • 一、在DCloud插件市场下载Prettier插件

  • 二、手动修改HbuilderX相关配置,使用自带的jsbeautify进行格式化

    由于HbuilderX可能会存在更新覆盖相关配置的可能性,所以这里编写node脚本进行批量修改。版本更新后若失效,重新执行即可。以Mac开发环境为例,Windows用户可自行修改路径设置。

    使用方式:

    1
    node ~/enableCssFormater.js

    enableCssFormater.js代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    //Mac用户请使用这两个变量,jsbeautifyrc注意将用户名替换为本机用户名
    const formatterPackage = "/Applications/HBuilderX.app/Contents/HBuilderX/plugins/format/package.json";
    const jsbeautifyrc = "/Users/用户名/Library/Application\ Support/HBuilder\ X/extensions/format/jsbeautifyrc.js";
    //Windows用户请使用这两个变量,也请注意修改相关路径
    const formatterPackage = "HbuilderX安装路径\plugins\format\package.json";
    const jsbeautifyrc = "用户目录下AppData\Roaming\HBuilder X\extensions\format\jsbeautifyrc.js";

    const fs = require('fs');
    try {
    console.log("Start writing HbuilderX plugins...")
    const package = fs.readFileSync(formatterPackage, "utf-8");
    const packageConfig = JSON.parse(package);
    let fileTypes = packageConfig.contributes.formator.filetypes;
    ["less", "scss"].forEach(type => {
    if (!fileTypes.includes(type)) {
    fileTypes.push(type)
    }
    })
    fs.writeFileSync(formatterPackage, JSON.stringify(packageConfig), "utf-8");
    console.log("Write HbuilderX plugins succeed.")
    } catch (err) {
    console.log(`Error writing HbuilderX Plugins: ${err}`);
    }
    try {
    console.log("Start writing JSBeautify...")
    const rc = require(jsbeautifyrc)
    let fileTypes = Object.keys(rc.parsers);
    [".less", ".scss"].forEach(type => {
    if (!fileTypes.includes(type)) {
    rc.parsers[type] = "css"
    }
    })
    fs.writeFileSync(jsbeautifyrc, "module.exports = " + JSON.stringify(rc), "utf-8");
    console.log("Write JSBeautify succeed.")
    } catch (err) {
    console.log(`Error writing JSBeautify: ${err}`);
    }