ES6项目构建
来源:互联网 发布:pk10助赢软件cpzyrj 编辑:程序博客网 时间:2024/05/29 09:15
前端工程一般具有以下四个步骤:
- 基础构架(项目文件目录结构)
- 任务自动化(自动监听、检测、压缩、响应)
- 编译工具(babel、webpack)
- 代码实现
目录结构如下
- app(前端)
- server(服务器)
- tasks(构建工具) -
step1:服务器端代码
在命令行输入: express -e .
(express脚手架工具,-e表示ejs模版引擎,.表示当前目录)npm install
step2:在tasks目录中创建任务js脚本,例如:编译、合并、文件更新
在命令行输入: mkdir util
touch util/args.js
step3: 返回根目录,创建package.json文件(npm安装依赖包)
在命令行输入: npm init
(自动创建package.json文件)
touch .babelrc
(创建babel编译配置文件)
touch gulpfic.babel.js
(创建使用es6语法的gulp配置文件)
整个项目用到的依赖包为:
package.json文件:
{ "name": "es6", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "babel-core": "^6.24.1", "babel-loader": "^7.0.0", "babel-preset-env": "^1.5.1", "babel-preset-es2015": "^6.24.1", "del": "^2.2.2", "gulp": "^3.9.1", "gulp-concat": "^2.6.1", "gulp-if": "^2.0.2", "gulp-live-server": "0.0.30", "gulp-livereload": "^3.8.1", "gulp-plumber": "^1.1.0", "gulp-rename": "^1.2.2", "gulp-sequence": "^0.4.6", "gulp-uglify": "^2.1.2", "gulp-util": "^3.0.8", "require-dir": "^0.3.2", "vinyl-named": "^1.1.0", "webpack": "^2.6.1", "webpack-stream": "^3.2.0", "yargs": "^8.0.1" }}
step4: 在util/args.js中,对命令行参数进行解析
import yargs from 'yargs'; const args = yargs .option('production',{ boolean:true,//表示选项是布尔值类型 default:false, describe:'min all scripts' }) //监听文件的修改 .option('watch', { boolean: true, default: false, describe: 'watch all scripts' }) //输出详细的命令行日志 .option('verbose', { boolean: true, default: false, describe: 'log' }) //强制生成sourcemaps .option('sourcemaps', { describe: 'force the creation of sroucemaps' }) //设置服务器端监听的端口,默认为8080 .option('port', { string: true, default: '8080', describe: 'server port' }) .argv//表示输入命令行的内容以字符串的形式进行解析 export default args;
step5: 创建命令行编译js脚本
在命令行创建 touch tasks/script.js
在script.js头部引入依赖模块:
import gulp from 'gulp';import gulpif from 'gulp-if';//glup中处理if判断import concat from 'gulp-concat';//glup中处理文件拼接;import webpack from 'webpack';//webpack工具包;import gulpwebpack from 'webpack-stream';import named from 'vinyl-name';import livereload from 'gulp-livereload';import plumber from 'gulp-plumber';import rename from 'gulp-rename';import uglify from 'gulp-uglify';import {log,colors} from 'gulp-util';import args from './util/args';
在命令行安装所引入的依赖包:
npm install gulp gulp-if gulp-concat webpack-stream vinyl-name gulp-livereload gulp-plumber gulp-uglify gulp-util yargs
在script.js中,创建任务;
gulp.task('scripts',()=>{ return gulp.src(['app/js/index.js']) .pipe(plumber({ errorHandle:function(){ } })) .pipe(named()) .pipe(gulpWebpack({ module:{ loaders:[{ test:/\.js$/, loader:'babel' }] } }),null,(err,stats)=>{ log(`Finished '${colors.cyan('scripts')}'`,stats.toString({ chunks:false })) }) .pipe(gulp.dest('server/public/js')) .pipe(rename({ basename:'cp', extname:'.min.js' })) .pipe(uglify({compress:{properties:false},output:{'quote_keys':true}})) .pipe(gulp.dest('server/public/js')) .pipe(gulpif(args.watch,livereload()))})
step6: 创建模版、服务任务脚本
1、在命令行新建touch tasks/pages.js
文件
在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’);//打开app目录下所有ejs文件
.pipe(gulp.dest(‘server’))
.pipe(gulpif(args.watch,livereload()))
})
2、在命令行查新建touch tasks/css.js
文件
在css.js头部引入依赖包;
import gulp from 'gulp'; import gulpif from 'gulp-if'; import livereload from 'gulp-livereload'; import args from './util/args';//命令行参数
创建一个任务:
gulp.task('css',()=>{ return gulp.src('app/**/*.css') .pipe(gulp.dest('server/public')) .pipe(gulpif(args.watch,livereload())) })
3、创建服务器端任务脚本
在命令行查新建touch tasks/server.js
文件
在server.js头部引入依赖包;
import gulp from 'gulp'; import gulpif from 'gulp-if'; import liveserver from 'gulp-live-server'; import args from './util/args';//命令行参数
创建任务:
gulp.task('server',()=>{ if(!args.watch) return cb();//如果不在监听状态,直接返回回调函数 var server = liveserver.new(['--harmony','server/bin/www'])//创建服务器 server.start(); //监听文件发生变化, gulp.watch(['server/public/**/*.js','server/views/**/*.ejs'],function(file){ server.notify.apply(server,[file]); }) //监听到以下文件改变时,重新启动服务器 gulp.watch(['server/routes/**/*.js','server/app.js'],function(){ server.start.bind(server)(); }) })
step7: 浏览器监听任务脚本
在tasks下新建browser.js文件,下入下面代码:
import gulp from 'gulp'import gulpif from 'gulp-if'import gutil from 'gulp-util'import args from './util/args'//文件自动监听gulp.task('browser',(cb)=>{ if(!args.watch) return cb(); gulp.watch('app/**/*.js',['scripts'])//如果app/**/*.js发生了改变,那么,会自动调用script.js这个脚本 gulp.watch('app/**/*.ejs',['pages']) gulp.watch('app/**/*.css',['css'])})
step8: 创建清空脚本
清空public里面的内容:
在tasks下新建claen.js文件,写入下面代码:
import gulp from 'gulp';import del from 'del';import args from './util/args.js'gulp.task('clean',()=>{ return del(['server/public','server/views'])//clean这两个文件夹})
step9: 创建任务串联脚本
在tasks下新建bulid.js文件,写入下面代码:
import gulp from 'gulp';//保证任务之间关联关系和顺序的包import gulpSequence from 'gulp-sequence';//脚本任务执行的顺序为:clean->css->pages->scripts->[browser,server]gulp.task('bulid',gulpSequence('clean','css','pages','scripts',['browser','server']))
在tasks下新建default.js文件,写入下面代码:
import gulp from 'gulp';gulp.task('default',['bulid']);
step10: 编写.babelrc文件
{ "presets":["es2015"]}
step11: 编写gulpfile.babel.js文件
import requireDir from 'require-dir';requireDir('./tasks');// 把tasks里面所有的文件加载进来运行;
step12: 运行检测
1、在命令行输入gulp
结果如下说明项目搭建成功:
2、当输入gulp –watch时,服务器处于监听状态,3000端口有效
在app下的index.ejs中写入
在浏览器访问localhost:3000时,
3、在服务端server的app.js中,加入热更新链接的包,并且npm install安装它:
npm install connect-livereload --save-dev
4、再次检测:
在app下的index.ejs中修改html,保存,查看浏览器,不刷新就能看到你修改的html内容;
- ES6项目构建
- ES6构建彩票项目
- es6项目构建01
- ES6+React+Webpack初步构建项目流程
- webpack+es6+angular1.x项目构建
- webpack+vue+vueRouter+es6 构建的简单实例项目
- ES6 项目
- webpack踩坑之路——构建基本的React+ES6项目
- Webpack构建基本的React+ES6项目 --- 图片的路径与打包
- webpack踩坑之路——构建基本的React+ES6项目
- Webpack构建基本的React+ES6项目 --- 图片的路径与打包
- 让我们开始用es6来写代码--gulp构建es6
- 构建项目
- 项目构建
- es6+webpack+vue项目实践
- es6+webpack+vue项目实践
- jQuery项目--ES6入门教程网站
- es6+webpack+vue项目实践
- windows系统下端口被占用解决方法
- Error inflating class com.jd.jrapp.widget.swiperefresh.SwipeRefreshListview
- Flutter进阶—网络和HTTP
- bzoj 1098
- AndroidStudio那些常用的配置
- ES6项目构建
- 加密认证程序,保护对象和存储介质,地点
- 拿起鼠标就画原型?交互设计师大咖告诉你该怎么做
- JAVA中线程同步的方法(7种)总结
- JAVA中I/0设计模式
- php打印前一天时间格式
- 在Eclipse 中下载 开源中国码云上的项目
- 公共数据库介绍~google公共数据
- 在mac上安装gradle(2017.6.5)