browserify学习总结

前言

在未接触browserify,虽然我知道它是一个前端构建工具,但还是有几个疑问:

1. browserify出现的日期?

2. 能构建哪些文件?

3. 附加的browserify代码体积是多大?

4. 能生成多个输出文件吗?

5. 如何兼顾开发调试?

6. browserify vs webpack?

browserify 

browserify可以让你使用类似于 node 的 require() 的方式来组织浏览器端的Javascript代码,通过预编译让前端Javascript可以直接使用 Node NPM 安装的一些库。

安装

npm install -g browserify

示例

module.js:

module.exports = ‘It works from module.js.‘

module2.js:

module.exports = ‘It works from module2.js.‘

这是 entry.js 的内容,像普通的 nodejs 程序那样使用 require() 加载库和文件:

entry.js:

var m = require(‘./module.js‘);
var m2 = require(‘./module2.js‘);
console.log(m, m2);

使用browserify编译:

$ browserify entry.js > bundle.js

编译后的文件:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module ‘"+o+"‘");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var m = require(‘./module‘);
var m2 = require(‘./module2‘);

console.log(m, m2);
},{"./module":2,"./module2":3}],2:[function(require,module,exports){
module.exports = ‘It works from module.js.‘
},{}],3:[function(require,module,exports){
module.exports = ‘It works from module2.js.‘
},{}]},{},[1]);

现在entry.js 需要的所有其它文件都会被编译进 bundle.js 中,包括很多层 require() 的情况也会一起被递归式的编译过来。

编译好的 js可以直接拿到浏览器使用

<script src="bundle.js"></script>

结合gulp

结合Gulp使用时,需要在工程里面添加package.json和安装一些node依赖。

示例:

gulpfile.js:

var gulp = require("gulp");
var browserify = require("browserify");
var sourcemaps = require("gulp-sourcemaps");
var source = require(‘vinyl-source-stream‘);
var buffer = require(‘vinyl-buffer‘);

gulp.task("browserify", function () {
var b = browserify({
  entries: "./entry.js",
  debug: true /*告知browserify在运行同时生成内联sourcemap用于调试*/
});

return b.bundle()
  .pipe(source("bundle.js"))
  .pipe(buffer())
  .pipe(sourcemaps.init({loadMaps: true}))
  .pipe(sourcemaps.write("."))
  .pipe(gulp.dest("./dist"));
});

那就需要安装:

npm install gulp --save-dev
npm install gulp-sourcemaps --save-dev
npm install browserify --save-dev
npm install vinyl-source-stream --save-dev
npm install vinyl-buffer --save-dev

vinyl-source-stream:用于将browserify的bundle()的输出转换为gulp可用的vinyl(一种虚拟文件格式)流。

vinyl-buffer:用于将vinyl流转化为buffered vinyl文件(gulp-sourcemaps及大部分Gulp插件都需要这种格式)

编译运行:

gulp browserify

自问自答

1. browserify出现的日期?

在网上没有找到browserify开始出现的日期的说明,只是有Github上找到最初的版本是在2011/6/6。anywhere,这问题并不关键,也就不深究。

2. 能构建哪些文件?

如上面介绍,只能构建JavaScript文件。

3. 附加的browserify代码体积是多大?

文件合并后(编译后),browserify附加的代码的体积(不是业务代码)是不到1KB的。

4. 能生成多个输出文件吗?

严格上讲,单从命令使用,只能是一个输出文件。

5. 如何兼顾开发调试?

页面上运行时的js是编译后,所以要兼顾开发调试,那还是要用source map。

PS:不过必须部署到服务器才能看到source map文件。

browserify vs webpack

由于我用得不深,下面一些酌见:

1. 都是前端模块化的方案,都需要预编译。

2. browserify只干JavaScript,webpack啥都干(CSS、JavaScript、图片等)

3. browserify是轻量级的,webpack 整体解决、大而全的。

PS:webpack官网有对二者的使用方法进行对比:webpack for browserify users

总结

关于模块化的,无论是异步模块加载(AMD),还是browserify的预编译。关键不在于运行时是合并成一个文件,还是异步加载。关键是在于处理模块的依赖,使开发时候不需要关注模块之间的加载顺序、依赖关系,使用方式,只需关注自己当前模块的开发(不用管使用的模块在哪里,这模块又依赖了哪些模块)。

就类似于maven,提供了一个放置jar包,管理依赖关系,使得第三方库易于使用,最后也可做打包发布。

所以,无论是用RequireJS、SeaJS,还是grunt、gulp,或者browserify、webpack,最终都是为了模块开发,压缩合并只是一小部分。

附录:

示例代码:https://github.com/codingforme/code-learn/tree/master/browserify

参考文献

1. browserify【百度百科】

2. https://www.zhihu.com/question/37020798 【知乎】

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/5861932.html

时间: 2024-11-19 04:55:15

browserify学习总结的相关文章

gulp进阶构建项目由浅入深

阅读目录 gulp基本安装和使用 gulp API介绍 Gulp.src(globs[,options]) gulp.dest(path[,options]) gulp.task(name[,deps],fn); gulp.watch(glob[,opts],tasks) gulp一些常用插件 gulp-rename(重命名) gulp-uglify(JS压缩) gulp-minify-css(css文件压缩) gulp-minify-html(html压缩) gulp-concat(JS文件合

前端模块化开发学习之gulp&amp;browserify篇

 随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发的时候,你会觉得十分费劲,因为你不知道文件之间复杂的关系,所以我们需要利用一些插件来配合进行模块化的开发. 所谓模块化的开发,写过nodejs的人都知道,文件之间的依赖可以用require()实现,但是浏览器端是不支持这样的依赖形式的,而browserify却可以解决这个问题,再加上gulp这个强大

webpack 学习

我的 webpack.config.js module.exports = { entry: [ './src/js/app.js', './src/js/my.js' ], output: { path: __dirname + '/output/', publicPath: "/output/", filename: 'main.js' }, module: { loaders: [ {test: /\.(jpg|png)$/, loader: "url?limit=81

lodash源码学习(1)

前端开发这个行业这几年发展速度太快,各种新技术不断更新,从es5到es6再到es7,从grunt,browserify到webpack,gulp,rollup,还有什么postcss,typescript,flow...,一直都在学习新技术,作为一个才工作不久的新人,感觉内心有点浮躁了,想巩固一下基础,之前听别人说lodash的源码很不错,所以学习学习.我不是什么大牛,如果有什么分析得不对的,大家请务必要原谅我....话不多说,lodash版本4.17.4,开始!. 1.“Array” Meth

Nodejs学习路线图

Reference: http://mp.weixin.qq.com/s?src=3&timestamp=1463322948&ver=1&signature=aIZC*rkx9fSa5Z0bQmJfN0bumnigT7UFSUmp1BvWxxEgAwyA8zeRcsDcGGkpOaGxge8FC*dz9PzGh5C0bpz5efM8ph146Lcqp29w7Ss3DrEtj3PVu1G2185kdi42NJzV1wxSuO*xjZ2X4giQnPwKtg== Node.js框架是

node.js 学习笔记

学习网站:http://www.nodejs.net/a/20141016/232139.html: 笔记:介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网

Node.JS 学习路线图

转载自:http://www.admin10000.com/document/4624.html 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的 Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮 助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性

React学习系列

React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初学者,英语也不是很好,不过一直强迫自己看英文文档. 这是理解翻译,翻译的不好,请见谅!()中的是我翻译过程中理解,参考下,有什么说的不对的欢迎指点下! 第一节:如何开始react和了解react的概念 1.React是什么 react是Facebook 开发出来用于促进UI交互,创建带有状态的,可复

vue学习笔记——简单的介绍以及安装(一)

学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html 1.简单的介绍 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版