browserify-transform的写法
2016-09-02 13:36
190 查看
1.前言
最近在研究Browserify构建工程,主要通过
gulp,
browserify,
gulp-browserify配合。但是在工程中发现使用
lessify插件配合
less-plugin-inline-urls需要传参,但是通过
gulp-browserify配合
gulp的时候
transform无法传参。略显坑爹。所以决定自己写一个
transform。
2.代码
首先是要用到的库,through2库,这是一个专门用来处理stream的库,比较简单实用,也可以自己写原生的。
var gulp = require('gulp'); var gulpRename = require('gulp-rename'); var browserify = require('browserify'); var gulpBrowserify = require('gulp-browserify'); gulp.task('js', function (){ gulp.src('./index.js', {read: false}) .pipe(gulpBrowserify({ transform: ['./transforms/youTransform.js'], // 这里存放你自定义的transform函数 extensions: ['.less'] })) .pipe(gulpRename('output.js')) .pipe(gulp.dest('./')) }); gulp.start('js');
youTransform.js
var through = require('through2'); // stream 库 var less = require('less'); // less var inlineurl = require('less-plugin-inline-urls'); // less 转base64插件 module.exports = function (file, props) { if (!/\.less$/.test(file)){ return through(); // 检测到不是 less 文件就返回一个空的stream } return through(function (buf, enc, next) { var self = this; less.render(buf.toString('utf8'), { plugins: [inlineurl], filename: file, // filename如果不设置,会出问题。而且不报错,需要注意 }, function(err, output) { if (err) { next(err) // 捕获错误,通过 next 把err传到steam对象上 } else { self.push('module.exports = ' + JSON.stringify(output.css)); // 输出转换后的内容 next(); } }); }, function (next){ next(); // _flushFunction 是必须写的,否则browserify无法知道transform已经完成 }) // 通过上面的next捕获到的err,在这里进行错误处理 .on('error', function (err){ console.log(err.message + ' -filename: ' + err.filename + ' -index: ' + err.index + ' -line: ' + err.line) }); };
相关文章推荐
- Swift 中CGAffineTransform的写法
- 解锁css3新姿势之transform3D各属性及transform兼容之矩阵写法
- transform的兼容性写法
- 使用transform的scale缩放的写法误区
- 底层引擎类的架构写法
- lower_bound二分的三种写法
- Leetcode - String - 344. Reverse String (3种写法)
- Java多线程编程-单例模式几种写法的错与对
- js函数写法
- ARC版的模版宏的写法和用法
- 关于url-pattern路径的写法
- 执行计划SQL写法差异改变之insert all
- ibatis 里查询select语句写法带分页
- css3 transform
- css blur 的兼容写法
- 单例模式的几种写法及分析
- 关于PageBase页面继承类的写法
- 数据录入窗口的通用写法
- Android studio遇到 java.lang.OutOfMemoryError: GC app:transformClassesWithDexForDebug解决方法 以及gradle优化
- QT pro文件详细写法+实例