浅谈前端自动化构建(摘抄)

前言

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

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

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

  拷贝 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的基础使用,更多使用方法 可以查看官方文档

小结

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

附:大佬原文地址https://www.cnblogs.com/kasmine/p/6436131.html

原文地址:https://www.cnblogs.com/ruoyaozhan/p/10859336.html

时间: 2024-12-16 10:04:12

浅谈前端自动化构建(摘抄)的相关文章

浅谈前端自动化构建

前言 现在的前端开发已经不再仅仅只是静态网页的开发了,日新月异的前端技术已经让前端代码的逻辑和交互效果越来越复杂,更加的不易于管理,模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难,没有一个统一的标准,让前端的项目结构千奇百怪.前端自动化构建在整个项目开发中越来越重要. 我们首先来回想一下之前我们是如何来开始做一个项目的. ① 首先要确定这个项目要使用什么样的技术来实现,然后开始规划我们的项目目录,接着就要往项目增加第三方库依赖,比如: 拷贝 CSS库(Yui Reset |

web 环境搭建00前端自动化构建工具(gulp)

web 环境搭建----前端自动化构建工具(gulp): 1----先下载安装node.js 2----然后在node.js命令行安装:npm install gulp -g (全局下载安装gulp插件) 3----然后进入到项目文件夹(命令cd 文件夹名),在项目文件夹中安装依赖文件:npm install gulp --save-dev (根据依赖文件下载gulp插件) 4----在项目文件夹目录下初始化:npm init (初始化文件) {初始化文件后项目中会出现packgae.json文

前端自动化构建——需求和工具选择

今天突然心血来潮,想把前端的一些人工工作流程自动化,其实之前已经在用grunt进行自动化构建,但总是觉得还是有些事情未做好.首先说说,前端平时需要做那些自动化吧: 1. 先讲HTML,每个项目每个页面都需要统一的头部,其他标题,关键字,作者等meta自行修改,body部分每个页面各自填充,但使用的框架统一. 2. CSS,我使用的是less来编写,所以需要编译成css,另外,编译过程,一些css属性需要自动添加浏览器前缀,例如border-radius,属性最好自动按照类型排序,一些css的编写

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

gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到某一工程目录下 跟grunt一般,也是需要package.json包依赖文件和一个入口文件 gulpfile.js(其他名字识别不了) 然后就类似的先装上gulp npm install gulp --save-dev 最基本的使用方式是这样:(使用jshint插件校验js代码) var jshin

近期总结:generator-web,前端自动化构建的解决方案

本文结合最近的工作经验,总结出一个较简洁的前端自动化构建方案,主张css和js的模块化,并通过grunt的自动化构建,有效地解决css合并,js合并和图片优化等问题,对于提高前端性能和项目代码质量有一定参考价值,欢迎阅读和点评:) github地址:https://github.com/liuyunzhuge/generator-web demo地址:https://liuyunzhuge.github.io/generator-web/ 有兴趣的同学,在阅读文章,学习或使用demo的过程中,有

浅谈前端性能优化(移动端)

上一篇讲了PC端的部分:前端性能优化(PC端),这次继续说移动端的.相对于PC端的,移动web浏览器上有一些明显的特点:设备的屏幕小.新特性兼容性较好.支持一些比较新的HTML5和CSS3.需要与Native应用交互等.但移动端可用的CPU资源和网络资源极为有限,因此要做好移动端web上的优化往往需要考虑做更多的事情.首先在移动web的前端页面渲染中,PC的优化规则同样适用,此外针对浏览器也要做一些更细节的优化达到更好的效果.需要注意的是,并不是移动端的优化在PC端不适用,而是由于兼容性的原因,

前端自动化构建工具Webpack开发模式入门指南

Webpack Webpack是时下最流行的模块打包器 它的主要任务就是将各种格式的JavaScript代码,甚至是静态文件 进行分析.压缩.合并.打包,最后生成浏览器支持的代码 特点: 代码拆分方案:webpack可以将应用代码拆分成多个块,每个块包含一个或多个模块,块可以按需异步加载,极大提升大规模单页应用的初始加载速度 智能的静态分析:webpack的智能解析器几乎可以处理任何第三方库 Loader加载器:webpack只能处理原生js模块,但是loader可以将各种资源转换为js模块 p

前端自动化构建工具

全局安装是把包安装在Node安装目录下的node_modules文件夹中,一般在 \Users\用户名\AppData\Roaming\ 目录下,可以使用npm root -g查看全局安装目录 本地(局部)安装是把包安装在指定项目(要在指定的根目录下输入命令)的node_modules文件夹下(若没有,会自动创建一个node_modules文件夹) 具体区别,推荐博文:  全局安装和本地(局部)安装的区别 本地安装可以让每个项目拥有独立的包,不受全局包的影响,方便项目的移动.复制.打包等,保证不

基于gulp搭建的前端自动化构建框架

Gulp-cli 基于gulp搭建的前端自动化构建.适用于中小型项目,快速构建前端项目框架. 项目启动 // 常用命令 项目编译: npm run build 项目编译并启动: npm run start 项目地址 如对你有帮助,希望给个Star !哈哈哈!! git clone [email protected].com:perfectSymphony/Gulp-cli.git 项目目录 ├── README.md # 项目说明 |-- bin # (在gulpfile文件中使用到)解析lay