自动化构建

作者: 66pillow | 来源:发表于2017-12-12 17:19 被阅读0次

process.env.NODE_ENV读环境变量

Gulp

优化前端开发流程的工具。基于流,gulp.src使用glob定义路径,将匹配文件以pipe流形式导入gulp插件处理
处理完毕通过gulp.dest写入指定目录

task异步方法返回:
1.return pipe
2.return promise
3.callback

gulp.task('scripts', [], function () {
  return gulp.src(path.join(config.paths.www, 'js/**/*.js'))
    //处理angularJs代码注入为annotate模式
    .pipe(glp.ngAnnotate())
    //写入tmp/scripts
    .pipe(gulp.dest(path.join(config.paths.tmp, '/scripts')));
});

//创建浏览器实时刷新
var borowserSync = require('browser-sync').create();

gulp.task('sass', function(){
    return gulp.src('sass/**/*.js')
        //文件改变,浏览器刷新
        .pipe(browserSync.stream())
        //文件改变,局部更新
        .pipe(browserSync.reload({stream:true}));
});

//启动浏览器服务
function browserSyncInit(baseDir, browser) {
  glp.browserSync.init({
    startPath: '/',
    server: './',
    browser: browser,
    port: 8000,
    ui: {
      port: 8001
    },
    notify: false
  });
};

gulp.watch('sass/**/*.scss', ['sass']);
//浏览器刷新
gulp.watch('*.html').on('change', browserSync.reload);

入口文件:
gulpfile.js

常用插件:
browserSync
gulp
gulp-load-plugins
gulp-inject将js,css注入html
gulp-useref将html中引入的所有文件,以block定义合并
gulp-rev文件添加版本号
gulp-revReplace用添加版本号的文件替换index.html中引用文件
gulp-uglify压缩JS
gulp-csso压缩CSS
gulp-minifyHtml压缩Html
gulp-css-spriter雪碧图
gulp-sass编译sass文件为css
gulp-concat合并js
gulp-sequence
browserify

运行
gulp taskName

Gulp + Browserify
CommonJs规范:
模块加载同步, Node也采用CommonJS规范
每个文件就是一个模块,有自己的作用域

module.exports.fun = function(){}
//exports变量指向module.exports
//不能直接将exports = function(){}因为这样等于切断exports与module.exports关系
exports.fun = function()
require('./fun')

但使用ES6模块语法可替代Browserify

Webpack

模块化解决方案。分析项目结构,找到JavaScript模块以及其它的一些浏览器不能直接拓展的语言(Scss, TypeScript)等,将其转换打包为合适的格式供浏览器使用

配置devtool节点生成Source Maps
配置devserver组件,实现浏览器监听代码修改

webpack-dev-server(需另安装)
小型Node.js Express服务器,使用webpack-dev-middleware服务webpack包
webpack-dev-server
静态服务器,类似express,只用于开发环境
2种刷新模式:iframe mode, inline mode
启动:webpack-dev-server -open
Hot Module Replacement(HMR)允许修改组件代码后,自动刷新实时预览,只更新部分,而不是页面重载

Loaders
调用外部脚本或工具,实现对不同格式的文件处理

Plugins
拓展Webpack功能,在整个构建过程中生效
Loaders是在打包构建过程中用来处理源文件的(JSX, Scss..),插件并不直接操作单个文件,直接对整个构建过程作用

常用插件
BannerPlugin打包后文件加版权
HtmlWebpackPlugin依据简单index.html模板,生成一个自动引用你打包后JS文件的新index.html
OccurenceOrderPlugin为组件分配ID
UglifyJsPlugin压缩JS
ExtractTextPlugin分离CSS和JS文件
CommonsChunkPlugin提取公共js

Babel
编译javascript的平台(ES6,ES7,JSX)
配置文件.babelrc

module.exports = {
    entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件
    output: {
        path: __dirname + "/build",//打包后的文件存放的地方
        filename: "bundle-[hash].js"//打包后输出文件的文件名
    },
    devtool: 'eval-source-map',
    devServer: {
        contentBase: "./public",//本地服务器所加载的页面所在的目录
        historyApiFallback: true,//不跳转
        inline: true
    },
    module: {
        rules: [
            {
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader"
                },
                exclude: /node_modules/
            },
            {
                test:/\.css$/,
                use:[
                    {loader:"style-loader"}
                    {loader:"css-loader", options:{modules:true}}
                ]
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('版权所有,翻版必究'),
        new HtmlWebpackPlugin({
            template: __dirname + "/app/index.tmpl.html"
        }),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin(),
        new ExtractTextPlugin("style.css")
    ]
};

//打包多页应用的方案
...
entry:{
    'about':'../about.js', 
    'product':'../product.js',
    vendor:['jquery', 'react']}
    plugins:[
        new HtmlWebpackPlugin({
            favicon:'', filename:'../views/about.html',         
            template:'../about.html', 
            chunks:['vendor', 'about']
        }),
        new HtmlWebPackPlugin({...})
    ]
}

运行
生成package.json运行npm init
package.json中"scripts"{"pc-prod": "webpack --config webpack.prod.config.js --display-error-details"}
npm run pc-prod

AMD规范与CommonJS规范

CommonJs规范加载模块是同步的,只有加载完成,才执行后面的操作
AMD规范异加载模块是异步的,允许指定回调函数,使用defined定义模块

相关文章

  • 从0构建自动化测试平台(五)兼容性测试实现

    往期文章 从0构建自动化测试平台(一)之技术选型 从0构建自动化测试平台(二)WEB服务器构建 从0构建自动化测试...

  • gulp

    1 gulp(自动化构建工具) 自动化构建 自动化构建:优化网站,提升网站性能,提高网站的代码,文件的优化处理 处...

  • 持续交付-发布可靠软件的系统方法阅读记录

    1、尽可能的自动化 自动化构建 自动化配置 自动化部署(热部署) 自动化测试 通过许多次的构建、配置、测试,从而对...

  • gulp

    叫做前端自动化构建工具,此类工具还有:grunt前端自动化构建工具 是什么?答: 自动化 less sass ...

  • Gradle自动化构建之自定义任务

    Gradle自动化构建之自定义任务 GitHub地址 Gradle自动化构建ProtocolBuffer 最近在看...

  • jenkins自动化构建配置

    背景 jenkins自动化构建gitlab项目 gradle或maven多模块项目在自动化构建时希望每个模块独立部...

  • 从零开始认识自动化构建

    我们日常开发自动化构建伴随着我们从开发到上线,那么自动化构建到底是个什么东西?自动化构建使开发者尽可能脱离运行环境...

  • Gradle完全解析

    导语: Gradle是一个基于groovy语言的自动化构建工具,提供了一个自动化构建任务的框架,具体构建过程支持自...

  • 前端内容的自动化构建

    前端内容的自动化构建 Gulp - 基于流的自动化构建工具 Browserify 官网 Github 一个管理前端...

  • es6运行在浏览器的前端项目工作流, 基于gulp,expres

    项目自动化构建思路 自动化构建逻辑 若app文件夹(前端静. 态页面)资源发生改变 -> 调用browser.js...

网友评论

    本文标题:自动化构建

    本文链接:https://www.haomeiwen.com/subject/cvpnixtx.html