FIS3是国内百度公司产出的一款前端工程构建工具,FIS3可以解决前端工程中性能优化、资源加载(异步、同步、按需、预加载、依赖管理、合并、内嵌)、模块化开发、自动化工具、开发规范、代码部署等问题,首先来简单的实现资源合并压缩提高性能等问题。

安装fix3

npm install -g fis3

创建项目目录

cd 进入此目录中初始化,执行

fis3 init

对需要的插件进行安装 ,比如安装scss编译插件:

npm install -g --save-dev fis-parser-node-sass

注意:如果 fis-parser-node-sass 安装失败,请卸载nodejs,安装低版本即可

让 fis3 产出能够支持相对路径。

npm install -g fis3-hook-relative

常用fis3插件 http://fis.baidu.com/fis3/docs/common-plugin.html

配置文件

打开fis-conf.js 做相应的配置

// 保持发布使用相对路径
fis.hook('relative');
fis.set('domain_test', '');
// 预发布环境
fis.set('domain_pre', 'http://test.zuobaiquan.com');
// 线上环境
fis.set('domain_build', 'http://zuobaiquan.com');
// 定义版本号
fis.set('version', '1.0.0'); fis.set('project.files', [
"tpl/**/*.html"
]); fis.set('project.files', [
'*.css',
'js/**',
'images/**',
'*.html'
]); fis.match("*", {
relative: true
}) //添加时间戳,解决缓存。
.match('*.{js,css,png}', {
useHash: true
})
.match('::package', {
spriter: fis.plugin('csssprites', {
htmlUseSprite: true,
styleReg: /(<style(?:(?=\s)[\s\S]*?["'\s\w\/\-]>|>))([\s\S]*?)(<\/style\s*>|$)/ig,
margin: 5
})
})
.match('/css/*.scss', {
rExt: '.css',
parser: fis.plugin('node-sass', {
// options...
})
})
.match('css/*.{css,scss}', {
preprocessor: fis.plugin('autoprefixer', {
"browsers": ["Android >= 2.1", "iOS >= 4", "ie >= 8", "firefox >= 15"],
"cascade": true
})
})
.match('/css/*.{scss,css}', {
useSprite: true,
optimizer: fis.plugin('clean-css')
})
.match('/js/*.js', {
parser: fis.plugin('babel-5.x'),
// fis-optimizer-uglify-js 插件进行压缩,已内置
optimizer: fis.plugin('uglify-js')
})
.match('images/*.png', {
optimizer: fis.plugin('png-compressor', {
type: 'pngquant'
})
})
.match('/css/(*.{png,gif})', {
release: '/images/sprite/$1$2'
}); // fis.media('production').match('/js/*.js', {
// parser: fis.plugin('jdists', {
// remove: "debug"
// })
// }) fis.media('test')
.match("*", {
domain: "${domain_test}",
}); fis.media('pre')
.match("*", {
domain: "${domain_pre}",
}); fis.media('build')
.match('*', {
domain: "${domain_build}"
})

如果打包build 不需要某些文件夹,可配置:

fis.match('/tpl/*', {
// 设置 release 为 false,不再产出此文件
release: false
})
开发阶段命令: fis3 server stop && fis3 server clean && fis3 server start -p  && fis3 release test --verbose -wLc
预发布: fis3 release pre --verbose -cd ./pre
发布阶段:fis3 release build --verbose -cd ./dist

fis3 server stop //终止服务 
fis3 server clean //清除服务目录下的文件 
fis3 server start -p 1111 //启动服务,端口号是1111 (不加-p 1111的话默认端口号是8080) 
fis3 release test –verbose -wLc //调试模式 不会关闭cmd

项目目录结构

建议安装  fis-parser-babel-5.x 插件,这样就支持 es6、es7 或者 jsx 编译成 es5 啦,是不是很溜!

npm install -g --save-dev fis-parser-babel-.x

fis-conf.js配置:

fis.match('*.js', {
parser: fis.plugin('babel-5.x')
})

源码地址:https://github.com/zuobaiquan/framework/tree/master/基于fis3前端工具构建的静态页面框架

利用fis3构建前端项目工程的更多相关文章

  1. 如何使用Docker构建前端项目

    原文链接 Docker单独部署前端项目和Node项目是非常便捷的,在这里分享一下Docker的使用,主要聊聊它的部署实践.(我是window10专业版安装Docker) Docker Docker是一 ...

  2. vue 构建前端项目并关联github

    这几天尝试用node开发一个网站,后端的接口已经初步开发完成,现在开始构建前端的项目,记录下过程,在学习下吧. 用vue-cli 构建项目,myproject.(构架过程略过) 每次在本地构建项目后和 ...

  3. Webpack构建前端项目

    前言 公司据说要搞前后端分离,趁这两天项目完成的差不多,抓紧时间学习一下前端知识 现在流行前端项目工程化,那么第一个问题就是如何创建工程(项目),第一次玩webpack 通过 NPM 创建项目 # 创 ...

  4. jenkins自动构建前端项目(window,vue)

    我们把一个多人协作的vue前端项目发布服务器,一般要经过以下步骤: git更新最新的代码 构建项目 把构建后的代码上传到服务器 如果用jenkins来构建的话,只需要点击一次构建按钮,就可以自动完成以 ...

  5. 如何利用gulp构建前端自动化

    1,使用 gulp.watch 来监听文件自动打包 在上篇文章中,介绍了如何利用webpack来为项目做打包编译等工作,其中介绍到在我们开发的时候,经常改动js,因为我们文件是引用编译后的js文件,若 ...

  6. 简单的利用nginx部署前端项目

    网上有很多教程写的一大堆东西,新手可能会有点看不懂,现在我写这篇文章是为了更好的帮助新手,如何将自己的前端项目部署到自己的服务器上. 首先我们必须要有一台自己的ubuntu服务器,如果没有可以去阿里云 ...

  7. 用gulp替代fekit构建前端项目

    https://segmentfault.com/a/1190000003060016 离开qunar有一个多月了,在离开的时候就决定不再用fekit.做出这个决定并不是因为fekit不好,恰恰相反, ...

  8. 【gulp】gulp + browsersync 构建前端项目自动化工作流

    什么是 gulp? gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务.gulp.js 是基于 node.js 构建的,利用 node.js 流的威力,你可以快速构 ...

  9. SpringMVC拓展——利用maven构建springMVC项目

    一.构建项目结构 首先需要构建一个符合目录结构的maven项目 file->new->maven project,勾选 create a simple project->next / ...

随机推荐

  1. (最简单)红米手机5A的USB调试模式在哪里开启的方法

    当我们使用安卓手机链接Pc的时候,或者使用的有些APP比如我们公司营销小组当使用的APP引号精灵,之前使用的老版本就需要开启usb调试模式下使用,现当新版本不需要了,如果手机没有开启usb调试模式,P ...

  2. MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL

    例如: ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo FOREIGN KEY(gradeid) REFERENCES grade(id) ON DELET ...

  3. java新知识系列 二

      1:数据库事务隔离以及事务隔离的级别 数据库事务隔离: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别:为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规 ...

  4. linux 按行分割文件

    $ sudo awk 'NR%2==1{close(p".txt");++p}{print > p".txt"}' test.txt $ sudo spl ...

  5. js实现表格无缝滚动效果

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. centos6.5上进行crontab操作

    1.service crond start 2. vi  /home/cron.ini */ * * * * /home/monitor.sh 3.crontab  /home/cron.ini OK

  7. C# 不用递归,获取无限层级数据

    对象属性 public class ResList { public int ID { get; set; } public List<ResList> Child { get; set; ...

  8. deepin 15.8桌面系统

    深度桌面环境是深度科技自主开发的美观易用.极简操作的桌面环境,主要由桌面.启动器.任务栏.控制中心.窗口管理器等组成,系统中预装了 WPS Office.搜狗输入法.有道词典.网易云音乐以及深度特色应 ...

  9. SQLServer之修改触发器

    修改触发器规则 修改CREATE TRIGGER语句以前创建的 DML.DDL 或登录触发器的定义.触发器是通过使用CREATE TRIGGER创建的.这些触发器可以由Transact-SQL语句直接 ...

  10. 我的第一个python web开发框架(28)——定制ORM(四)

    在数据库操作时,新增记录也是必不可少的,接下来我们应用字典的特性来组合sql语句 先上产品新增接口代码 @post('/api/product/') def callback(): "&qu ...