es6环境搭建
Posted sunmarvell
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6环境搭建相关的知识,希望对你有一定的参考价值。
A.文件目录创建
1.创建根目录(文件夹)es6:
可以直接创建,也可以 右键-git bush here: mkdir es6
2.进入es6文件夹:(cd es6)
3.es6下创建三个目录 app server tasks
4.在 app下 创建 css js views
5.进入app/js目录 创建一个js类目录class,放置类文件
6.初始化类文件
因为空的类没有作用,创建test.js
7.进入app/js目录 创建index.js(js入口文件)
8.进入app/views
创建模板文件(注:ejs是一个模板引擎,在node中需要启动) error.ejs 错误模板文件 index.ejs
9.进入到 es6/server/
10使用node的脚手架
express启动脚手架 -e表示启用ejs模板引擎
express -e .
11.执行npm install
到此服务器代码就安装好了;
12.进入到es6/tasks 创建util(放置一些常用的脚本)
创建初始化文件 tasks/util/args.js
13.在项目根目录 使用npm init (创建 package.json文件,就可以装依赖包了(配置依赖)) 、
一路回车,最后选择y,回车
14.创建设置babel 编译工具配置文件
.babelrc (文件名必须是.babelrc)
15.创建gulp的配置文件
gulpfile.babel.js
B. 构建脚本编码
1.编辑 tasks/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 files\' }) //设置是否需要输出编译日志 .option(\'verbose\', { boolean: true, default: false, describe: \'log\' }) //处理压缩 .option(\'sourcemaps\', { describe: \'force the creation of sroucemaps\' }) //设置服务器端口 .option(\'port\', { string: true, default: 8080, describe: \'server port\' }) //输入命令行内容以字符串解析 .argv export default args;
2.创建构建脚本tasks/scripts.js
import gulp from \'gulp\'; //引入gulp import gulpif from \'gulp-if\'; //gulp的语句中处理if判断的包 import concat from \'gulp-concat\'; //处理文件拼接的 import webpack from \'webpack\'; //打包的 import gulpWebpack from \'webpack-stream\'; //和webpack配合使用的 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, colors } from \'gulp-util\'; //命令行输出的包 import args from \'./util/args\'; //命令行参数进行解析的包
3.进入es6/ 安装scripts.js 中的依赖包 用空格隔开 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
4.继续在scripts.js文件中写入代码
//创建gulp的任务 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())) })
5.创建处理模板的脚本 tasks/pages.js
import gulp from \'gulp\'; import gulpif from \'gulp-if\'; import livereload from \'gulp-livereload\'; import args from \'./util/args\'; //创建一个pages任务 gulp.task(\'pages\', () => { return gulp.src(\'app/**/*.ejs\') .pipe(gulp.dest(\'server\')) .pipe(gulpif(args.watch, livereload())) })
6.创建处理css的脚本
tasks/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\')) //把文件原封不动的copy到server/public目录下
})
7.创建处理服务器的构建脚本tasks/server.js
import gulp from \'gulp\'; import gulpif from \'gulp-if\'; import liveserver from \'gulp-live-server\'; import args from \'./util/args\'; //创建服务的任务 gulp.task(\'serve\', (cb) => { if (!args.watch) return cb(); //如果是监听的创建一个服务器,运行server/bin/www.js var server = liveserver.new([\'--harmony\', \'server/bin/www\']); server.start(); //监听server/public/js /css 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)() }); })
8.创建浏览器监听并自动编译的脚本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\']); gulp.watch(\'app/**/*.ejs\', [\'pages\']); gulp.watch(\'app/**/*.css\', [\'css\']); });
9.创建编译文件清除的脚本(当每次文件修改时进行旧的文件清除)
import gulp from \'gulp\'; import del from \'del\'; import args from \'./util/args\'; //创建清空任务 gulp.task(\'clean\',()=>{ return del([\'server/public\',\'server/views\']) })
10.安装scripts.js 中的依赖包 用空格隔开
npm install gulp-live-server gulp-util del gulp-sequence --save-dev(表示安装后写入package.js配置)
11.创建将所有任务关联起来的脚本
tasks/build.js
import gulp from \'gulp\'; import gulpSequence from \'gulp-sequence\'; ////任务之间的关联顺序关系 gulp.task(\'build\', gulpSequence(\'clean\', \'css\', \'pages\', \'scripts\', [\'browser\', \'serve\']));
12.创建 tasks default.js
import gulp from \'gulp\';
gulp.task(\'default\',[\'build\']);
13.运行处理
报错
[21:34:10] Failed to load external module @babel/register
[21:34:10] Failed to load external module babel-register
[21:34:10] Failed to load external module babel-core/register
[21:34:10] Failed to load external module babel/register
[21:34:10] Using gulpfile E:\\es6\\gulpfile.babel.js
[21:34:11] Task \'default\' is not in your gulpfile
[21:34:11] Please check the documentation for proper gulpfile formatting
解决前四个是安装包没有安装 解决: npm install babel-loader babel-core babel-preset-env webpack --save-dev
后一个是没有发现gulpfile文件,创建的是gulpfile.babel.js 解决: 在 es6/gulpfile.babel.js下写入并安装require-dir包
import requireDir from \'require-dir\';
requireDir(\'./tasks\');
npm install require-dir --save-dev
14.配置 .babelrc 如下 同时安装依赖包 babel-preset-es2015
{ "presets":["es2015"] }
$ npm install babel-preset-es2015 --save-dev
15.命令行运行gulp
出现错误
注意其中这个错误: Module build failed: Error: The node API for `babel` has been moved to `babel-core`.
纠错:是因为版本兼容问题
将tasks/scripts.js中的
16.在ciews/index.ejs写入html文档测试
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> ssttee </body> </html>
17.命令行运行 gulp --watch 自动编译
浏览器中输入网址localhost:3000
发现命令行报错,不能实现热更新
将server/app.js改为
var express = require(\'express\'); var path = require(\'path\'); var favicon = require(\'serve-favicon\'); var logger = require(\'morgan\'); var cookieParser = require(\'cookie-parser\'); var bodyParser = require(\'body-parser\'); var routes = require(\'./routes/index\'); var users = require(\'./routes/users\'); var app = express(); // view engine setup app.set(\'views\', path.join(__dirname, \'views\')); app.set(\'view engine\', \'ejs\'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, \'public\', \'favicon.ico\'))); app.use(logger(\'dev\')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, \'public\'))); app.use(require(\'connect-livereload\')()); app.use(\'/\', routes); app.use(\'/users\', users); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error(\'Not Found\'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get(\'env\') === \'development\') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(\'error\', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(\'error\', { message: err.message, error: {} }); }); module.exports = app;
ctrl+c停止服务
根据错误提示安装依赖包
$ npm install serve-favicon --save-dev
执行 gulp --watch
可以啦,网页可以实时更新;
这个环境搭好了,以后都可以直接复制文件用了,简直是一劳永逸。
以上是关于es6环境搭建的主要内容,如果未能解决你的问题,请参考以下文章