自动化构建

自动化构建

重复的工作都应自动化
自动化工作流:脱离运行环境兼容带来的问题,使用提高效率的语法,规范和标准
ECMAScript
SASS
模板引擎:增强减少重复的html
都需要自动化构建工具,转义,被浏览器支持

自动化的体验

Sass编译
yarn add scss --dev 安装sass依赖
sass scss/main.sass css/style.css 编译后路径
NPM Scripts 解决重复执行的命令,也是实现构建工作流最简单的方式

在package.json 中添加scripts字段

"scripts": {
    "build": "sass scss/main.scss css/style.css  --watch",
    "preserve":"yarn build",
     "serve":"browser-sync"
  },

yarn add browser-sync --dev 启动测试服务器
yarn serve 启动服务器

常用的自动化构建工具
Grunt 最早的构建系统,基于临时文件,速度较慢,会有磁盘读写操作
Gulp 基于内存实现,速度快,同时执行多个
FIS 百度推出,把项目需求都实现,捆绑完善

Grunt是使用
命令
yarn init --yes
yarn add grunt
code gruntfile.js 添加入口文件

// Grunt 的入口文件
// 用于定义一些需要 Grunt 自动执行的任务
// 需要导出一个函数
// 此函数接收一个 grunt 的形参 ,内部提供一些创建任务可以用到的API

module.exports = grunt=>{
    grunt.registerTask("foo",()=>{
        console.log('grunt start')
    })
  grunt.registerTask("bar",'任务描述', ()=>{
        console.log('grunt task')
    })

    // grunt.registerTask("default", ()=>{
    //     console.log('grunt default  默认任务')
    // })
    // 多个任务
    grunt.registerTask("default", ['foo','bar'])

    // 异步任务
    // grunt.registerTask("async-task", ()=>{  同步模式,异步未生效
    //     setTimeout(()=>{
    //         console.log('async task stetimeout')
    //     },1000)
    // })
    grunt.registerTask("async-task", function(){
        const dome = this.async();
        setTimeout(()=>{
            console.log('async task stetimeout')
            dome()
        },1000)
    })

}

运行 yarn grunt foo foo是任务名
grunt 标记失败

module.exports = grunt=>{
    grunt.registerTask("bad",()=>{
        console.log('grunt bad')
        return false;  // bad 失败,bar未执行
    })
    grunt.registerTask("foo",()=>{
        console.log('grunt start')
    })

    grunt.registerTask("bar",'任务描述', ()=>{
        console.log('grunt task')
    })


    grunt.registerTask("default", ['foo','bad','bar'])

   
}

运行 yarn grunt default --force 解决

Grunt 配置方法

module.exports = grunt=>{
    // 压缩文件
    grunt.initConfig({
        // foo:'bar'
        foo:{
            bar:123
        }
    })

    grunt.registerTask('foo',()=>{
        console.log(grunt.config("foo.bar"))
    })
   
}

Grunt 多目标任务

module.exports = grunt=>{
    grunt.initConfig({
        build:{
            // 配置选项 options
            options:{
                foo: 'bar'
            },
            // 目标名称
            css: 1,
            js: 2
        }
    })
    // 多目标模式,可以让任务根据配置形成多个子任务
    grunt.registerMultiTask('build',function(){
        // 运行build命令时,会同时执行css任务及js任务
        console.log('build task')
        console.log(this.options())
        console.log(`target:${this.target},data:${this.data}`)

    })
} 

Grunt 插件
找到插件,安装到npm模块中
grunt.loadNpmTasks(‘grunt-contrib-clean’) 加载对应模块

添加配置选项

module.exports = grunt=>{
    
    grunt.initConfig({
       clean:{
           temp: 'temp/*.txt'
       }
    })
    grunt.loadNpmTasks('grunt-contrib-clean')
} 

常用模块
grunt-sass
grunt-babel

const sass = require('sass')
const loadGruntTasks = require('load-grunt-tasks')

module.exports = grunt => {
  grunt.initConfig({
    sass: {
      options: {
        sourceMap: true,
        implementation: sass
      },
      main: {
        files: {
          'dist/css/main.css': 'src/scss/main.scss'
        }
      }
    },
    babel: {
      options: {
        sourceMap: true,
        presets: ['@babel/preset-env']
      },
      main: {
        files: {
          'dist/js/app.js': 'src/js/app.js'
        }
      }
    },
    watch: {
      js: {
        files: ['src/js/*.js'],
        tasks: ['babel']
      },
      css: {
        files: ['src/scss/*.scss'],
        tasks: ['sass']
      }
    }
  })

  // grunt.loadNpmTasks('grunt-sass')
  loadGruntTasks(grunt) // 自动加载所有的 grunt 插件中的任务

  grunt.registerTask('default', ['sass', 'babel', 'watch'])
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值