fex-team / fis-parser-sass

A parser plugin for fis to compile sass file.
MIT License
16 stars 12 forks source link

输出目录设置问题? #24

Open calledT opened 9 years ago

calledT commented 9 years ago

我想把目录结构为

└── scss
    └── common.scss

的内容输出为

└── css
    └── common.css

想下面这样设置

fis.config.set('settings.parser.sass', {
    include_paths: [],
    output: 'css/'
});

输出结果变成了

└── css
    └── scss
        └── common.css

正确的配置应该是怎样的呢?

fouber commented 9 years ago

@calledT

fis最开始设计工具的时候,发现不应该让插件自己决定怎么输出,否则这个插件输出到output,那个插件输出到dist,这个插件有A规范,那个插件有B规范,就不能得到一致的架构设计了。

所以,fis规定:

插件只处理内容,fis负责确定发布路径。

于是,我们设计了一种配置,叫 roadmap.path ,负责给每个文件分配属性,而这些属性决定了fis对每个文件的处理方式。比如一个文件的 release ,那么这个文件就不会被发布,如果如果文件的 release 属性是 '/css/common.css' 那它就会被发布到这个目录下。所以,你的需求在fis中的配置为:

fis.config.set('roadmap.path', [
    {
        reg: /^\/scss\/(.*\.scss)$/,
        release: 'css/$1'
    }
]);

fis中,给文件分配属性是通过roadmap.path中的 reg 匹配来实现的,reg命中的文件路径,就把reg之外的其他属性都赋值给文件对象。

所以,上面这个配置就是命中了scss下的所有.scss后缀的文件,并且把匹配到的文件路径中scss后面的部分取出来用 $1 表示(这是正则分组,如果不了解,可以看一下js的正则表达式介绍),用这个值来设置文件的release属性

这样,fis在发布项目的时候,就知道该怎么发布文件了。接下来,如果你希望整个项目发布到d盘的output目录下作为最终发布路径,那么就执行命令:

fis release -d d:\output

然后,你的这个scss/common.scss由于配置了release属性是“css/common.css”,那么在这条命令执行后,它的实际产出路径就是 d:\output\css\common.css