Browserify
2015-07-09 21:08
316 查看
Browserfiy
怎么添加lib呢
手动去官网下载使用bower
Bower
Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系
简单点说 各种lib下载器 (同时还能下载依赖包)
因为会使用到bower命令 最好全局安装
npm install bower -g
然后使用下面的命令就能在bower_components中看到文件夹
bower install jquery
lib都下载好了 就可以再用script标签引入
<script src="/bower_componets/jquery/dist/jquery.min.js">
bower作为一个包管理工具 自然还有更新删除的功能啦
bower update jquery bower uninstall jquery
bower update命令用于更新模块。如果不给出模块的名称,则更新所有模块
bower uninstall命令用于卸载模块。默认情况下,会连所依赖的模块一起卸载。比如,如果卸载jquery-ui,会连jquery一起卸载,除非还有别的模块依赖jquery。
Browserify
Browserify 本身不是模块管理器,只是让服务器端的CommonJS格式的模块可以运行在浏览器端。这意味着通过它,我们可以使用Node.js的npm模块管理器。所以,实际上,它等于间接为浏览器提供了npm的功能。
Browserify是一个node.js模块,主要用于改写现有的CommonJS模块,使得浏览器端也可以使用这些模块。使用下面的命令,在全局环境下安装Browserify。
$ npm install -g browserify
最好在全局环境中安装, 因为后面要用到Browserify这个命令
Browserify参照了Node中的模块系统,约定用require()来引入其他模块,用module.exports来引出模块 因此我们用Node 的CMD形式随便写两个模块foo.js 和 main.js (main.js依赖foo.js)
foo.js
module.exports = function(x) { console.log(x); };
main.js
var foo = require("./foo"); foo("Hi");
然后
browserify main.js > compiled.js #OR browserify main.js -o compiled.js
之后在HTML中引入这个 compiled.js 就可以在浏览器中使用刚才的Node模块了
compiled.js 不仅包括了main.js,还包括了它所依赖的foo.js。两者打包在一起,保证浏览器加载时的依赖关系
Browserify编译的时候,会将脚本所依赖的模块一起编译进去。这意味着,它可以将多个模块合并成一个文件。
Debug
现在Browserify支持 source map在其官方文档中 https://github.com/substack/node-browserify 有这么一个命令
$ browserify main.js --debug | exorcist bundle.js.map > bundle.js
将main.js 编译成 bundle.js
PS exorcist 也是一个包 需全局安装
这样之后就生成了 bundle.js 和 bundle.js.map
有了source map debug就很方便
实时更新 Beefy
http://didact.us/beefy/全局安装beefy
beefy main.js:bundle.js --live
无需指定debug参数 默认debug就是打开的
--live 是修改后自动刷新
结合Gulp
结合Gulp使用时,你的Browserify只安装在某个项目内--- 意思是browserify需要在工程内安装而不是全局安装
npm install browserify --save-dev
这里需要加上 --save-dev 的原因是一会儿之后我们需要用到package.json
随便写个main.js
var name = require("./name"); console.log("Hello! " + name);
name.js
module.exports = "aya";
在没有gulp的情况下我们是手动编译的,用browserify 命令
这里我们用gulp来作编译这件事情 写一个gulpfile.js
从require中看出 当前project 不仅要安装browserify 还需要gulp-sourcemaps vinyl-source-stream vinyl-buffer
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: "main.js", debug: true }); return b.bundle() .pipe(source("bundle.js")) .pipe(buffer()) .pipe(sourcemaps.init({loadMaps: true})) .pipe(sourcemaps.write(".")) .pipe(gulp.dest("./dist")); });
上面我向gulp添加了一个任务 这个任务名字是browserify
所做的事情就是调用browserify 然后在当前目录下dist/中生成bundle.js 文件
vinyl是啥 原博中有 我搬运一下
debug: true是告知Browserify在运行同时生成内联sourcemap用于调试。引入gulp-sourcemaps并设置loadMaps: true是为了读取上一步得到的内联sourcemap,并将其转写为一个单独的sourcemap文件。vinyl-source-stream用于将Browserify的bundle()的输出转换为Gulp可用的vinyl(一种虚拟文件格式)流。vinyl-buffer用于将vinyl流转化为buffered vinyl文件(gulp-sourcemaps及大部分Gulp插件都需要这种格式)
browserify-shim
browserify为了使各个文件中的变量不冲突, 编译后的代码都放在了IIFE中,这样又有了一个新问题, 假如我想使用jquery的插件怎么办?<script src="jquery.js"></script>
<script src="jquery.plugin.js"></script>
这样引入插件的时候 jq的插件会默认读取window中的
$对象 但是现在
$对象被包起来了, 我们用不到了...
接下来隆重介绍browserify-shim 它是一个npm 模块
npm install browserify-shim --save-dev
package.json中配置如下
{ "browserify": { "transform": [ "browserify-shim" ] }, "browser": { "jquery.pep": "./vendor/jquery.pep.js" }, "browserify-shim": { "jquery.pep": { "depends": [ "jquery:jQuery" ] } }, "devDependencies": { "browserify": "^11.0.1" } }
那么jQ插件就可以正常运行啦 假如main.js 是这样的
```javascript
var $ = require("jquery");
require("jquery.pep");
$(".move-box").pep();
···
PS 注意jquery这个库本身是在npm中的, 所以我是通过npm安装的jquery
但是jquery.pep 不是, 我是通过shim的方式将这个pep引入的
在生成的pep中有这么一段
(function (global){ ; jQuery = global.jQuery = require("jquery"); ; var __browserify_shim_require__=require;(function browserifyShim(module, define, require) { ;(function ( $, window, undefined ) { // pep code .......... }(jQuery, window)); }).call(global, module, undefined, undefined); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"jquery":3}]},{},[1])
相关文章推荐
- Struts2.之HelloWorld简单演示
- 实例方法/类方法
- Asp.net Vnext Filters
- HDFS的可靠性
- STL算法设计理念 - 预定义函数对象
- Shell脚本编程入门(一)
- Shell脚本编程入门(一)
- STL算法设计理念 - 预定义函数对象
- AC自动机
- emgu在VS2010下可能出现的几种常见问题解决方案
- Shell脚本编程入门(一)
- Shell脚本编程入门(一) 分类: 学习笔记 linux ubuntu 2015-07-09 21:06 29人阅读 评论(0) 收藏
- xcode debug 2
- BZOJ 1002 [FJOI2007]轮状病毒
- Algorithms—67.Add Binary
- C语言学习笔记:22_结构体
- GPS(ublox MAX 7c)移植 (飞思卡尔 IMX6 Android4.3平台)
- Leetcode46: Power of Two
- OSG点选事件的基类
- Sticks(Central Europe 1995)