nodejs下用es6编程babel和gulp的配合应用

简介: 每一个程序员都有一颗全栈的心,node和es6满足了尤其是前端的憧憬。node下用express框架,实现一个简单的mvc。

每一个程序员都有一颗全栈的心,node和es6满足了尤其是前端的憧憬。

node下用express框架,实现一个简单的mvc。当然用es6编程就涉及到es6到es5的转换。即使是node6 对es6实现了百分之九十四的支持也有那么一点没有实现,比如import等,所有就需要转换,用babel

安装babel

npm install  babel-core -g
或者
npm install --save-dev babel-core
在安装

npm install --save-dev babel-preset-es2015
当然有babel-preset-es2016 但是 使用 2016是 运行babel-node  就有有错误 improt 不支持



还是老实的用2015

需要在目录下面被子.babelrc 文件

{
  "presets": ["es2015", "stage-0"]
}
stage-0 有 0, 1, 2, 3  。stage-0包含了后面3个

class Base {
    base() {
        console.log(23);
    };
}

module.exports = Base;

import Base from './Base';

class app extends Base {
    son () {
        this.base()
    }
}

var a = new app();
a.son();

如此就能正确输出了,当然最好需要转换成es5

运行命令 babel 

babel ./src --out-dir ./core

也可以放到

package.json 里

"scripts": {
    "build": "babel --watch=./src --out-dir ./core",
    "start": "node ./bin/www"
  },
运行npm run build

这样做是很费劲的要是有文件新建或者修改,就要再次运行,最好的还是加入gulp对文件进行监听就好了,自动转换。

babel也有watch命令 测试发现对文件 目录不起作用,需要准的文件,如

babel --watch=./src/test.js --out-dir ./core

开发需要用到的工具

  "devDependencies": {
    "babel-cli": "^6.22.2",
    "babel-preset-es2016": "^6.22.0",
    "babel-preset-stage-0": "^6.22.0",
    "browserify": "^14.0.0",
    "gulp": "^3.9.1",
    "gulp-babel": "^6.1.2",
    "gulp-plumber": "^1.1.0",
    "gulp-sourcemaps": "^2.4.0",
    "gulp-streamify": "^1.0.2",
    "gulp-strip-comments": "^2.4.3",
    "gulp-watch": "^4.3.11",
    "vinyl-source-stream": "^1.1.0"
  }


var gulp = require('gulp'),
    babel = require('gulp-babel'),
    watch = require('gulp-watch'),  //监听
    plumber = require('gulp-plumber'),  //错误管理 提示
    sourcemaps = require('gulp-sourcemaps'),
    strip = require('gulp-strip-comments'), //删除注释
    streamify = require('gulp-streamify'),  //只支持 buffer 的插件直接处理 stream


gulp 执行的

    path = {
        src: {
            js: 'src/**/*.js'
        },
        dist: {
            js: "core/"
        }
    };

gulp.task('6to5', function () {
    gulp.src(path.src.js)  // 多个文件目录  参数为数组
        .pipe(watch(path.src.js))
        .pipe(plumber())
        .pipe(sourcemaps.init())
        .pipe(strip())  //去除注释
        .pipe(streamify(babel()))
        .pipe(sourcemaps.write({addComment: false}))  
        .pipe(plumber.stop())  
        .pipe(gulp.dest(path.dist.js));
});

运行gulp watchnode 

gulp.task('watchnode', ['6to5'], function (){
    gulp.watch([path.src.js], [babel]);
});
生成对应文件如下:



这样就可以畅爽的写es6了

BaseDao


import connect from '../../config/connect';

class BaseDao {
    //查询
    query(field, col, callback) {
        connect.open(function(err, db) {
          
        });
    }

    //保存 新建
    save(field, col, callback) {
        connect.open(function(err, db) {
        });
    }

}

module.exports = BaseDao;

对用户操作 UserDao
import nodeUtil from 'util';
import connect from '../../config/connect';
import BaseDao from './BaseDao';
import user from '../models/User';

//继承Dao
class UserDao extends BaseDao {
      //获取用户信息 登录等
    getUser(user, callback) {
        this.query(user, 'users', callback);
    }
    //普通用户注册
    setUser (user, callback) {
        this.saveUser(user, 'users', callback);
    }
}

module.exports = UserDao;


route 路由 routes.js

import express, { Router } from 'express';
import csurf from 'csurf';

import util  from '../lib/util';
import UserDao from '../dao/UserDao';

const router = Router();
const userDao = new UserDao(); //实例化UserDao
router.post('/reg', function(req, res) {

    let pwd = util.mix(req.body.pwd);
    let User = {
        email: req.body.name,
        pwd: pwd
    }
    userDao.setUser(User, function(err, user){
        console.log(err);
    });
});

转换后的 BaseDao









有需要的交流的可以加个好友


相关文章
|
16天前
|
JavaScript API 数据库
深入理解Node.js事件循环及其在后端开发中的应用
【9月更文挑战第3天】本文将深入浅出地介绍Node.js的事件循环机制,探讨其非阻塞I/O模型和如何在后端开发中利用这一特性来处理高并发请求。通过实际的代码示例,我们将看到如何有效地使用异步操作来优化应用性能。文章旨在为读者揭示Node.js在后端开发中的核心优势和应用场景,帮助开发者更好地理解和运用事件循环来构建高性能的后端服务。
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的图像识别技术深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第27天】本文将介绍深度学习中的图像识别技术,包括其原理、应用领域及未来发展。我们将探讨如何通过神经网络实现图像识别,并分析其在医疗、交通等领域的应用。最后,我们将展望图像识别技术的发展前景。
|
24天前
|
运维 Cloud Native JavaScript
云端新纪元:云原生技术深度解析深入理解Node.js事件循环及其在异步编程中的应用
【8月更文挑战第27天】随着云计算技术的飞速发展,云原生已成为推动现代软件开发和运维的关键力量。本文将深入探讨云原生的基本概念、核心价值及其在实际业务中的应用,帮助读者理解云原生如何重塑IT架构,提升企业的创新能力和市场竞争力。通过具体案例分析,我们将揭示云原生技术背后的哲学思想,以及它如何影响企业决策和操作模式。
|
1月前
|
存储 缓存 JavaScript
构建高效后端服务:Node.js与Express框架的实战应用
【8月更文挑战第2天】在数字化时代的浪潮中,后端服务的构建成为了软件开发的核心。本文将深入探讨如何利用Node.js和Express框架搭建一个高效、可扩展的后端服务。我们将通过实际代码示例,展示从零开始创建一个RESTful API的全过程,包括路由设置、中间件使用以及数据库连接等关键步骤。此外,文章还将触及性能优化和安全性考量,旨在为读者提供一套完整的后端开发解决方案。让我们一同走进Node.js和Express的世界,探索它们如何助力现代Web应用的开发。
|
20天前
|
JavaScript 开发者
深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第31天】 本文将带你走进Node.js的事件循环机制,通过浅显易懂的语言和实例代码,揭示其背后的工作原理。我们将一起探索如何高效利用事件循环进行异步编程,提升后端应用的性能和响应速度。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启发和思考。
|
1月前
|
数据采集 资源调度 JavaScript
Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
【8月更文挑战第4天】Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
37 5
|
23天前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第29天】本文将深入浅出地介绍Node.js事件循环机制,并结合代码示例探讨其如何影响后端开发实践。我们将从事件循环的基本概念出发,逐步解析其工作原理和性能优化策略,旨在帮助开发者更好地理解和运用Node.js进行高效的后端开发。
|
23天前
|
JSON JavaScript 中间件
深入浅出Node.js后端开发之Express框架应用
【8月更文挑战第29天】本文将带领读者快速了解并掌握使用Express框架进行Node.js后端开发的基础和进阶知识。我们将一起探索Express的安装、基本使用方法,并通过实际代码示例学习如何搭建一个简单的Web服务器。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
26天前
|
JavaScript Linux
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
|
27天前
|
JavaScript 前端开发 Linux
【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate()
【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate()