百度fis对于前端的一些自动化操作确实是强大的。以前一直用harpjs来做静态服务器,对于sass、jade等优化也是做的挺好,但是就是配置少了些。
fis3的一些常用配置备份下,尽可能的模拟出harpjs运行环境.
最常用的命令行:
fis3 server start //启动一个服务
fis3 release -wL //发布网站,-wL参数为实时自动刷新
最常用的配置:
fis.media()
接口提供多种状态功能,比如有些属性配置是开发阶段的,有些是上线时需要起作用的。
fis.media('prod').match('*.js', {
optimizer: fis.plugin('uglify-js')
});
运行sass,jade等。
//npm install -g fis-parser-sass
fis.match('*.scss', {
rExt: '.css', // from .scss to .css
parser: fis.plugin('sass', {
//fis-parser-sass option,expanded:没有缩进的、扩展的css代码。nested:嵌套缩进的css代码。compact:简洁格式的css代码。compressed:压缩后的css代码
expanded : true
})
});
//npm install -g fis-parser-jade
fis.match('*.jade', {
rExt: '.html',
loaderLang: 'html',
parser: fis.plugin('jade', {
pretty : true
})
});
js模块化,以mod.js为例子
// npm install [-g] fis3-hook-module
fis.hook('module', {
mode: 'commonJs' // requirejs加载器设置值为 'amd'
});
fis.match('/mod/*.js', {
isMod: true, // 指明模块文件,组件建议都是匿名方式 define
release: '/static/$0'
});
fis.match('::package', {
// npm install [-g] fis3-postpackager-loader
// 分析 __RESOURCE_MAP__ 结构,来解决资源加载问题
postpackager: fis.plugin('loader', {
resourceType: 'commonJs',
useInlineMap: true // 资源映射表内嵌
})
})
文件压缩与合并
fis.match('::packager', {
postpackager: fis.plugin('loader', {
allInOne: true
})
});
fis.match('*.{css,scss}', {
optimizer: fis.plugin('clean-css')
});
fis.match('*.js', {
optimizer: fis.plugin('uglify-js')
});
关于jade编译出来后无法正常解析js模块,和文件正常合并等问题
我用jade编译出来的文件同原生html文件还是有差距的。
无法用上面方法合并压缩文件
js模块不能正确打包,模块化js文件没有正常加载依赖的js文件。
上面的问题折腾了我很久,下载了若干插件还是不行。后来找到了一个解决办法。
fis大牛给出帮助信息了,就是关于 fis3-postpackager-loader 插件 静态资源前端加载器,用来分析页面中使用的和依赖的资源(js或css), 并将这些资源做一定的优化后插入页面中。如把零散的文件合并。
注意:此插件做前端硬加载,适用于纯前端项目,不适用有后端 loader 的项目。因为不识别模板语言,对于资源的分析和收集,比较的粗暴!!!
默认 loader 只会以 html 的方式处理后缀为 .html 的文件,如果希望其他后缀也以 html 的方式去处理,请设置 loaderLang 属性。
fis.match('*.md', {
loaderLang: 'html'
});
Fis中嵌入资源
嵌入资源能解决上面jade的问题。可以在html文件中切入一个jade文件。
<link rel="import" href="a.jade?__inline">
依照这个原理,其实模块化很容易实现。如上a.jade中可以引入相关的css,js文件。当然在css中也可引入css文件。
@import url('demo.css?__inline');
这个会和sass文件中引入scss文件一样。在html这css中文件后缀加上?__inline会将图片文件转化为base64字符串。
Tips
最近es6好像开始火起来了。在fis上试着装了一个es6转es5插件。
//npm install -g fis-parser-es6-babel
fis.set('project.fileType.text', 'es6');
fis.match('*.es6', {
rExt: '.js',
parser: fis.plugin('es6-babel', {})
});
一个小问题就是Sublime3无法为.es6的文件语法高亮,其实很简单:
打开文件后点击右下角的Plain Text,在出现的文件格式中选择open all with current extension as… ->”需要显示的语法类型”。这样以后打开这个类型的文件就会自动进行语法高亮了。
全局或本地安装插件
npm install [-g] fis3-hook-relative
fis-conf.js 启用插件
fis.hook('relative');
让所有文件,都使用相对路径。
fis.match('**', { relative: true })