0.1.13 • Published 9 years ago

babel-dev-server v0.1.13

Weekly downloads
-
License
ISC
Repository
-
Last release
9 years ago

babel-dev-server

为什么会有这个轮子

之前在项目中使用了gulp+browserify+es6做前端工程化,模块增加到上百个以后,browserify转换代码很慢,大概要8秒以上。开发中肯定会经常保存,每次保存用8秒时间编译,体验非常差,整个团队日积月累浪费的时间也不是小数目。因此有了做优化的想法,主要思路就是: 1. 虽然模块总数很多,但是每一时刻被修改的模块只有一个,所以应该只重新编译被修改的模块,而不应该重新编译所有模块 2. 被修改的模块可能增加了新的依赖,但是增加大量依赖并不是开发的常态,是非常小概率的事件,因此只编译、分析被修改的那一个模块可以大幅增加开发效率 3. 编译后的js其实没必要写入文件系统。把js写入文件系统,js被请求的时候再从文件系统中读出,再通过http发送,这是多此一举。如果不写入文件系统,就可以把编译好的js按模块缓存起来,根据http请求实时合并js并返回 4. 为保证不会返回正在编译中的模块,使用状态机进行调度 5. 同时支持发布模式,将转换后的js以各种格式(比如vinyl-stream)输出,交给后面的插件处理。

最后确实达到了目的,除了启动时的第一次编译需要秒级的时间,添加依赖超多的模块,如react时需要秒级时间,平时开发编译均为毫秒级时间完成,发布模式可以输出vinyl-stream,gulp插件可以直接处理此流。

更新v0.19

最近项目里使用了react和css module,css也可以通过require来引用,因此在依赖分析、实时编译、代码输出中加入了css。输出的js里引用到的css会以jsfilename-in-app-css.css的方式输出,发布时同样支持后续处理

安装

npm install babel-dev-server

配置示例

module.exports = {
  babel:{
    presets:['es2015','stage-1','react'],
    plugins: [["antd", { "style": 'css' }]]
  },
  entry:'client/src/page/*.js',
  output:{
    port:3029,
    map:[
      {
        urlPath:'/static/js/',
        filePath:'client/src'
      }
    ]
  },
  watch:{
    path:['client/src','libs'],
    extension:['.js','.jsx','.css'],
    ignored:/\/\.\w+/
  },
  log:{
    level:'info'
  }
}

gulp发布示例

  var gulp = require('gulp');
  var server = require('babel-dev-server');
  var bdsConfig = require('./dev-config.js');
  var cleanCSS = require('gulp-clean-css');
  var uglify = require('gulp-uglify');
  var pump = require('pump');//使用pump监测流数据消费结束
  gulp.task('dev',function() {
    server(bdsConfig);
  });
  gulp.task('transform',function(cb){
    bdsConfig.output.exportFormat = 'vinyl-stream';
    server.output(bdsConfig,function(jsstream,cssstream){
      var jsFin,cssFin;
      pump([
        jsstream,
        uglify(),
        gulp.dest('./client/dist/static/js/page/')
      ],function(){
        jsFin = true;
        next();
      });
      pump([
        cssstream,
        cleanCSS(),
        gulp.dest('./client/dist/static/js/page/')
      ],function(){
        cssFin = true;
        next()
      })
      function next(){
        if(jsFin&&cssFin){
          console.log('transform完成');
          cb();
        }
      }
    })
  })
0.1.13

9 years ago

0.1.12

9 years ago

0.1.11

9 years ago

0.1.10

9 years ago

0.1.9

9 years ago

0.1.7

10 years ago

0.1.6

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago