前言

  现在的前端开发已经不再仅仅只是静态网页的开发了,日新月异的前端技术已经让前端代码的逻辑和交互效果越来越复杂,更加的不易于管理,模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难,没有一个统一的标准,让前端的项目结构千奇百怪。前端自动化构建在整个项目开发中越来越重要。

我们首先来回想一下之前我们是如何来开始做一个项目的。

① 首先要确定这个项目要使用什么样的技术来实现,然后开始规划我们的项目目录,接着就要往项目增加第三方库依赖,比如:

  拷贝 CSS库(Yui Reset | bootstrap)JS库(Requiet.js | Seajs | jQuery | jQuery插件 ) 进相应目录(拷贝 N个文件,花费N分钟)

② 然后,进行编码

  编辑器编码 => 切换到浏览器F5 => 编辑器编码 => 切换到浏览器F5 => 编辑器编码 => 切换到浏览器F5 => 编辑器编码 => 切换到浏览器F5 …………

③ 编码完成,进行语法检查,文件合并和压缩

  1. HTML去掉注析、换行符 - HtmlMin

  2. CSS文件压缩合并 – CssMinify

  3. JS代码风格检查 – JsHint

  4. JS代码压缩 – Uglyfy

  5. image压缩 - imagemin

整个过程都在重复无用繁琐的工具...

渐渐的,一些自动化构建工具出现了,人们开始使用例如Bower、Gulp、Grunt、node、yeoman等等工具来构建一个本地的开发环境。自动化构建已经成了前端开发的趋势,所以学好自动化构建也就是为自己的开发打下了良好的基础。

1.Grunt

  前端自动化小工具,基于任务的命令行构建工具

开始使用Grunt

  通过阅读官方文档可以知道更多详细内容,下面只是总结一下,自己使用Grunt的一个实例,便于日后使用,可以按照这个套路进行~

安装 grunt-cli

  1. 1. 自备node环境(>0.8.0), npm包管理

  2. 2. 卸载旧版本grunt(<0.4.0) (没装过请忽略)

    npm uninstall grunt -g
  3. 安装grunt-cli

    npm install grunt-cli -g

 开始使用Grunt构建项目

   一般需要在你的项目中添加两份文件:package.json 和 Gruntfile

     然后,写好下面的gruntfile.js文件的格式

module.exports = function(grunt) {
  // 项目配置.
  grunt.initConfig({
    // 定义Grunt任务
 });

 // 加载能够提供"uglify"任务的插件。
  grunt.loadNpmTasks('grunt插件');

  // Default task(s).
  grunt.registerTask('default', ['任务名']);
}

下面是我的一个 gruntfile.js文件

 1 module.exports = function (grunt) {
2 grunt.initConfig({
3 watch: {
4 ejs: {
5 files: ['views/**'],
6 options: {
7 livereload: true,
8 },
9 },
10 js: {
11 files: ['public/js/**', 'models/**/*.js', 'schemas/**/*.js'],
12 options: {
13 livereload: true, //文件更新时重新启动服务
14 },
15 },
16 },
17 nodemon: {
18 dev: {
19 file: './bin/www' //根据自己的实际修改
20 }
21 },
22 concurrent: { // 同时执行nodemon和watch任务
23 target: {
24 tasks: ['nodemon', 'watch'],
25 options: {
26 logConcurrentOutput: true
27 }
28 }
29 }
30 });
31
32 // 加载包含 “watch","concurrent","nodemon"任务的插件
33 grunt.loadNpmTasks('grunt-contrib-watch')
34 grunt.loadNpmTasks('grunt-concurrent')
35 grunt.loadNpmTasks('grunt-nodemon');
36
37 grunt.option('force', true)
38 // 默认执行的任务列表
39 grunt.registerTask('default', ['concurrent'])
40 }

最后,执行命令

  1. 将命令行的当前目录转到项目的根目录下。
  2. 执行 npm install 命令安装项目依赖的库。
  3. 执行   grunt  命令。

小结 Grunt的基本使用也就如上所示,比较简单,更多可以参考Grunt的插件库,比如 contrib-jshint js代码检查等插件的使用

2 . Gulp

   gulp是基于Nodejs的自动任务运行器,它能自动化地完成javascript/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。

  使用Gulp的优势就是利用流的方式进行文件的处理,使用管道(pipe)思想,前一级的输出,直接变成后一级的输入,通过管道将多个任务和操作连接起来,因此只有一次I/O的过程,流程更清晰,更纯粹。Gulp去除了中间文件,只将最后的输出写入磁盘,整个过程因此变得更快。

使用Gulp,可以避免浏览器缓存机制,性能优化(文件合并,减少http请求;文件压缩)以及效率提升(自动添加CSS3前缀;代码分析检查)

gulp的安装及基本使用

    1. 全局安装 gulp:

$ npm install --global gulp

    2. 作为项目的开发依赖(devDependencies)安装:

$ npm install --save-dev gulp

    3. 在项目根目录下创建一个名为 gulpfile.js 的文件:

var gulp = require('gulp');

gulp.task('default', function() {
// 将你的默认的任务代码放在这
});

    4. 运行 gulp:

$ gulp

默认的名为 default 的任务(task)将会被运行,在这里,这个任务并未做任何事情。

 gulp的插件使用

  同Grunt一般,gulp也有插件库,具体有兴趣开发gulp插件的,可以看看 http://www.gulpjs.com.cn/docs/writing-a-plugin/

下面是我的一个 gulpfile.js文件,就此进行分析

'use strict'

const gulp = require('gulp'); //将gulp插件包含进来 

//在文件改动时候运行 mocha 测试用例
const mocha = require('gulp-mocha'),
gutil = require('gulp-util'),
jshint = require('gulp-jshint'), //js代码校验
uglify = require('gulp-uglify'), //压缩 js文件
minifyCSS = require('gulp-minify-css'),//压缩css
concat = require('gulp-concat'), //合并文件
notify = require('gulp-notify'),
cache = require('gulp-cache'),
rename = require('gulp-rename'), //重命名文件
livereload = require('gulp-livereload'),
imagemin = require('gulp-imagemin');//优化图片; const srcPath = {
script: './src/scripts/',
style: './src/styles/',
tempalte: './src/tempaltes/'
}; const destPath = {
style: './dist/styles/',
script: './dist/scripts/',
base: './dist/'
}; // ==========================
// 获取目录src/test/../的js文件进行代码检验,然后和main.js合并,进行压缩,最后复制到dist/scripts目录下。
// ==========================
function packjs() {
return gulp.src(srcPath.script)
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('dist/scripts'))
.pipe(rename({
suffix: '.min'
}))
.pipe(uglify())) //仅在生产环境时候进行压缩
.pipe(gulp.dest(destPath.script))
.pipe(notify({
message: 'Scripts task complete'
}));
} gulp.task('js', () => packjs());

命令行执行

$ gulp js

更多内容 查看 gulp 官方文档api

3 . webpack 

  Webpack是一个模块打包的工具,它的作用是把互相依赖的模块处理成静态资源。

webpack 的安装及基本使用

    1. 全局安装 webpack :

$ npm install webpack -g

    2. 作为项目的开发依赖(devDependencies)安装:

$ npm install --save-dev webpack 

    3. 创建一个名为 webpack.config.js 的配置文件:

module.exports = {
   // 入口文件
entry : "./entry.js",
// 打包输出文件
output : {
path : __dirname,
filename : "bundle.js"
}
};

命令行执行 如下命令,即可将 ./main.js 作为入口打包 bundle.js:

$ webpack

webpack的进阶使用 之 加载器

module.exports = {
     // 入口文件
entry : "./entry.js",
// 打包输出文件
output : {
path : __dirname,
filename : "bundle.js"
},
module : {
loaders :[
{test : /\.css$/,loader:"style!css"},
{test: /\.js$/,loader: 'babel',
                    include: [path.join(projectRoot, 'src')],
                    exclude: /node_modules/}]
}
};

这个例子使用 加载器 ,何谓加载器?加载器是对你的应用的源文件进行转换的工具。

不同类型的文件有不同的加载器,比如jsx,es6要用到babel-loader,

加载css要用到css-loader,加载html要用到html-loader,以及 vue-loader,css-loader 等等.

所有的loader都放在module下面的loaders里边.通常有以下内容:

  1. test:是对该类文件的正则表达式,用来判断采用这个loader的条件

  2. exclude是排除的目录,比如node_modules中的文件,通常都是编译好的js,可以直接加载,因此为了优化打包速度,可以排除。作为优化手段它不是必须的

  3. loader: 加载器的名称,每一个加载器都有属于它自己的用法,具体要参考官方说明

  4. query: 传递给加载器的附加参数或配置信息,有些也可以通过在根目录下生成特殊的文件来单独配置,比如.babelrc

  以上只是稍微讲了webpack的基础使用,更多使用方法 可以查看官方文档

小结

  前端工程自动化方案更新很快, 学习这些工具,是为了减轻重复劳动,提高效率。选择适合自己的方案,而不是在追寻技术的路上迷失了方向。

浅谈前端自动化构建(Grunt、gulp。webpack)的更多相关文章

  1. 前端自动化构建工具--Gulp&&Webpack

    前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...

  2. 前端自动化构建工具gulp的使用总结

    前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...

  3. 前端自动化构建工具——gulp

    gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...

  4. 前端自动化构建工具 Gulp 使用

    一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...

  5. 【前端自动化构建 grunt、gulp、webpack】

    参考资料: 用自动化构建工具增强你的工作流程!:http://www.gulpjs.com.cn/ gulp详细入门教程:http://www.ydcss.com/ JavaScript构建(编绎)系 ...

  6. 前端自动化构建工具 gulp 学习笔记 一、

    一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...

  7. 前端自动化构建工具-gulp

    gulp 和grunt这两个是我知道的自动构建工具,但是说实话都没在项目中用过,不太清楚自动化构建是什么意思, 1.grunt和gulp有什么相同点和不同点? (1).易于使用:采用代码优于配置策略, ...

  8. 前端自动化构建之gulp

    前言 之前学完html的基础后就去学js框架了,每次都是用脚手架搭好的文件,在无形中体验了一波前端自动化带来的方便.然后前一段时间才开始学习前端自动化. 基本介绍 gulp说得简单一点就是一个自动化把 ...

  9. 浅谈maven自动化构建工具

    转载https://blog.csdn.net/zxm1306192988/article/details/76209062 Maven是什么[what] 1.Maven 是 Apache 软件基金会 ...

  10. 前端自动化构建工具——gulp环境搭建教程

    gulp是前端工程化的工具,它可以对html,css,js等代码和图片进行压缩,也可以对sass和less等预处理语言进行编译,代码部署.gulp学起来简单,用起来方便,大大提高我们工作效率. 这里可 ...

随机推荐

  1. 073_SFDC Limit

    我们在开发的过程中,应多注意一些系统自身的限制,以及遇到此类问题的应对措施: Description Synchronous Limit Asynchronous Limit Total number ...

  2. Ubuntu18.04LTS虚拟机优化

    1.没网 刚安装好没网,可以设置NAT连接,也可以直接设置为桥接模式联网.这里直接桥接. 网络中心使用的是以太网,所以就在菜单的"编辑"里的"虚拟网络编辑器"里 ...

  3. 实验一-密码引擎-加密API研究

    实验一-密码引擎-加密API研究 API:应用程序接口(API:Application Program Interface)是一组定义.程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信 ...

  4. 关于Java中数组的简单使用

    关于java中数组的简单使用--继java环境配置后的第二篇学习笔记 近期在学习Java的过程中学到了数组的部分,至于为什么我会到数组才来写这个,主要是数组这一章节的内容感觉还是与之前学的C里面的数组 ...

  5. 分享至: 日本神話の考古学.PDF

    书本详情 日本神話の考古学 种类:Languages - General & Miscellaneous Languages - Reference年:1993出版社:朝日新聞社语言:japa ...

  6. docker compose服务编排简介、基于发布包构建多个webapi容器 和 基于镜像实现Nginx反向代理webapi

    一. docker compose服务编排简介 1. 背景 微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大: A. 要创建镜 ...

  7. (0724) 格雷码 verilog

    https://blog.csdn.net/gordon_77/article/details/79489548 assign gray_value = (binary_value >> ...

  8. Oracle的Pctfree

    1.创建一张表 create table student( student_id number ); 但是在pl/sql中查看却是以下的建表语句: -- Create table create tab ...

  9. idea插件Tranlation配置有道搜索引擎

    idea配置有道翻译引擎 一.更换翻译引擎原因 由于Google在2022年9月末宣布关闭GoogleTranslate在中国的服务,原本在chrome浏览器和idea上使用的google翻译引擎也不 ...

  10. 工程能力-远程JUNO-linux

    工程能力-远程JUNO-linux 1 ping 通linux 地址 2 ssh/scp 连接/传输数据 ssh root@10.188.72.42 scp -P 22 README.md root@ ...