ES6学习笔记二--构建工具脚本

8 篇文章 0 订阅
2 篇文章 0 订阅


安装依赖包:~/es6 $ npm install gulp gulp-if gulp-concat webpack webpack-stream vinyl-named gulp-livereload gulp-plumber gulp-rename gulp-uglify gulp-util yargs --save-dev

安装babel: ~/es6 $ npm install babel-loader babel-core babel-preset-env webpack --save-dev

安装:~/es6 $npm install gulp-live-server gulp-util del --save-dev

全局安装gulp: ~/es6 $npm install gulp -g

安装 ~/es6$npm install connect-livereload --save-dev       热更新的依赖

安装 ~/es6$ npm install gulp-sequence --save-dev          这是build.js里面用的处理关联顺序的依赖

安装 ~/es6$ npm install require-dir --save-dev         这是gulpfile.babel.js为了引入目录下的文件的依赖包

 

运行 $gulp --watch 自动编译
实现热更新 在server/app.js 大概23行
在app.use(express.static(path.join(__dirname, 'public')));后添加
app.use(require('connect-livereload')());
ctrl+c停止服务

执行监听的命令:$gulp --watch  ,打开浏览器:localhost:8080查看页面

(不加--watch执行完一次就结束了,加上后是一直监听)

------------------------------------------------------------------------------------------------------

gulp.task task(name[, deps], fn)

task()方法用于定义任务,传入名字、依赖任务数组、函数即可,gulp会先执行任务数组,结束后调用定义的函数,可以通过此手段控制任务的执行顺利。gulp.task创建任务方法:gulp.task('任务名',  ( )=>{   })    或者带回调函数的:gulp.task('任务名',  (cb)=>{   })   

gulp.src src(globs[, options])

src()方法输入一个glob或者glob数组,然后返回一个可以传递给插件的数据流

gulp.dest dest(path[, options])

dest()方法用来写文件,第一个参数表示最终输出的目录名。注意,它无法允许我们指明最终输出的文件名,只能指定输出文件夹名,而且在文件夹不存在的情况下会自动创建。

gulp.watch watch(globs[, opts], cb) or watch(globs[, opts], tasks)
watch()方法可以监听文件,它接受一个glob或者glob数组以及一个任务数组来执行回调.
---------------------------------------------------------------- -----------------------------
构建工具脚本在es6/tasks/ 目录下.
es6/tasks/util/args.js  命令行参数创建:命令行参数初始化

看命令行里面有没有包含option里面的对应的几个命令.可以区分线上环境和开发环境.

import yargs from 'yargs';

const args = yargs;
.option('production',{
	boolean:true,   
	default:false,  //命令中没有production时,默认为开发环境,有的话为线上环境
 	describe:'min all scripts' //不被解析的
})

.option('watch',{
	boolean:true,
	default:false,
	describe:'watch all files' 
})

.option('verbose',{
	boolean:true,
	default:false,
	describe:'log' 
})

.option('sourcemaps',{
	describe:'force the creation of sourcemaps'
})

.option('port',{
	string:true,
	default:8080,
	describe:'server port'
})
.argv  //表示以字符串进行解析
export default args;

es6/tasks/server.js 编写服务器构建脚本:

import gulp from 'gulp';
import gulp from 'gulp-if';
import liveserver from 'gulp-live-server';
import args from './util/args';

gulp.task('serve',(cb)=>{
	//如果不是处于监听状态下,返回回调函数
	if(!args.watch) return cb();
	//如果在监听状态下,要创建服务器 --harmony表示当前命令行下执行后面的这个脚本server/bin/www
	var server = liveserver.new(['--harmony','server/bin/www']);
	//启动服务器
	server.start();
	//监听server目录下的js,ejs改变时的热更新
	gulp.watch(['server/public/**/*.js','server/views/**/*.js'],function(file){
		//通知服务器文件改变
		server.notify.apply(server,[file]);
	})
	//监听需要重启服务的文件.eg路由改变,接口变化
	gulp.watch(['server/routes/**/*.js','server/app.js'],function(){
		//重启服务
		server.start.bind(server())
	});

})

es6/tasks/css.js 编写css构建脚本

import gulp from 'gulp';
import gulpif from 'gulp-if';
import livereload from 'gulp-livereload';
import args from './util/args';

gulp.task('css',()=>{
  // 先打开文件,再复制到server/public下. /**/双星号表示全部的*.css文件,包括嵌套的文件
  return gulp.src('app/**/*.css')
    .pipe(gulp.dest('server/public'))//此实例主要是监听js和.ejs变化,所以没加热更新,但一般都要监听css
})
es6/tasks/pages.js 编写服务构建脚本

import gulp from 'gulp';
import gulpif from 'gulp-if';
import livereload from 'gulp-livereload';
import args from './util/args';

gulp.task('pages',()=>{
	return gulp.src('app/**/*.ejs')
		.pipe(gulp.dest('server'))
		.pipe(gulpif(args.watch,livereload()))  //监听热更新
})


es6/tasks/scripts.js 脚本服务

import gulp from 'gulp';
import gulpif from 'gulp-if';
import concat from 'gulp-concat';  //拼接
import webpack from 'webpack';   //打包
import gulpWebpack from 'webpack-stream';  //gulp文件流打包
import named from 'vinyl-named';  //重命名标记
import livereload from 'gulp-livereload'; //热更新
import plumber from 'gulp-plumber';  //处理文件信息流,可以处理错误
import rename from 'gulp-rename';  //重命名
import uglify from 'gulp-uglify';  //资源压缩,处理js,css压缩
import {log,color} from 'gulp-util';  //用命令行输出log和色彩
import args from './util/args';   //导入命令行参数文件

gulp.task('scripts',()=>{
	return gulp.src(['app/js/index.js'])//先打开文件

  
  
   .pipe(plumber({ //错误处理
errorHandle:function(){ } })) .pipe(named())//文件重命名 .pipe(gulpWebpack({ //对文件进行编译,3个参数 module:{ loaders:[{ //对js文件用babel编译 test:/\.js$/, loader:'babel-loader' }] } }),null,(err,stats)=>{//第三个参数进行错误处理,第二个参数为null log(`Finished '${colors.cyan('scripts')}'`,stats.toString({ chunks:false })) }) .pipe(gulp.dest('server/public.js')) //编译后的文件放置的路径 .pipe(rename({//重命名 cp.min.js basename:'cp', extname:'.min.js' })) .pipe(uglify({compress:{properties:false},output:{'quote_keys':true}})) //压缩 .pipe(gulp.dest('server/public/js')) //压缩后文件存到server/public.js下面 .pipe(gulpif(args.watch,livereload()))//监听热更新 })

tasks/browser.js   监听js/ejs/css,若发生变化就调用相应的脚本文件

import gulp from 'gulp';
import gulpif from 'gulp-if';
import gutil from 'gulp-util';
import args from './util/args';

//browser和scripts,pages,css的关联
gulp.task('browser',(cb)=>{
	//如果没有用监听
	if(!args.watch) return cb();
	//监听app里js变化时调用scripts构建脚本,完成后es6转成es5或3,写到server目录下的文件里
	gulp.watch('app/**/*.js',['scripts']);
	//监听app的模板文件变化
	gulp.watch('app/**/*.ejs',['pages']);
	//监听css
	gulp.watch('app/**/*.css',['css']);

});

tasks/clean.js   清空指定文件目录,因为每次编译要覆盖原来编译的文件,要先clean.

import gulp from 'gulp';
import del from 'del';
import args from './util/args';

gulp.task('clean',()=>{
	//清空js,css,和模板
	return del(['server/public','server/views'])
})

tasks/build.js :处理关联顺序 

import gulp from 'gulp';
import del from 'del';
import args from './util/args';

gulp.task('clean',()=>{
	//清空js,css,和模板
	return del(['server/public','server/views'])
})
tasks/default.js  :输入$ gulp 命令,不带任务名字时,会取执行默认任务即名为default的任务,这个任务取调用build.js文件.

import gulp from 'gulp';
// 如果gulp执行default任务,就去找build.js
gulp.task('default',['build']);
编写gulpfile.babel.js文件:把tasks下面的所有的包都引进来

import requireDir from 'require-dir';
// 引入tasks目录下的所有文件
requireDir('./tasks');
(需要npm 装require-dir)

编写  .babelrc文件:  这是babel的配置文件,配置preset,为了编译ES6语法.

{
"presets":["es2015"]
}
在app/view/index.ejs里面写内容:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>es6</title>
</head>
<body>
	I am here!
</body>
</html>

执行监听的命令:$gulp --watch  ,打开浏览器:localhost:8080查看页面



提示错误:Fail to load external module,忽略运行程序也是可以出现页面的.


报错之后:(1)  tasks/scripts.js中 loader:'babel'改成loader:'babel-loader'  //新版的webpack不允许缩写,所以需要写完整
(2) server/app.js中在最下面加上 module.exports = app;
(3) server/bin/www中var port = normalizePort(process.env.PORT || '3000');改成var port = normalizePort(process.env.PORT || '8080'); //3000是默认端口,容易被占用,所以改成8080或其他
(4) 安装require-dir
(5) tasks/util/args.js最后加上export default args;

  (6)es6/tasks/scripts.js 脚本服务里面的 webpack配置的babel-loader必须要加loader后缀了,不能直接写babel,会报错.


参考这个博客解决方法:https://www.cnblogs.com/jingouli/p/7605183.html  ES6环境搭建







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值