Browserify了解

目录
    1. 通过一个小练习来了解browserify

白日依山尽,黄河入海流。 欲穷千里目,更上一层楼。

本文为本人略读官网文档后的大略笔记,实在不适合他人阅读

前言

一个JavaScript程序的静态模块打包器(将css、img、js等文件打包成一个单独的js文件)

nodejs 把JavaScript的使用从浏览器端扩展到了服务器端,使其快速流行。
nodejs中常用到的require, module.exports等功能在浏览器端并不能直接使用,browserify解决了这个问题

安装

npm install -g browserify

1. 通过一个小练习来了解browserify

第一步:创建hello.js文件

module.exports = 'Hello World!';

第二步:创建main.js

var msg = require('./hello.js');
console.log("logInfo:", msg);

第三步:browserify打包

browserify main.js -o bundle.js

第四步:创建index.html(使用bundle.js)

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>hello world</title>
  </head>
  <body>
    <div id='root'>
    </div>
    <script src="bundle.js"></script>  <!--引入打包后的js文件-->
  </body>
</html>
运行效果

使用jquery

安装

npm i --save jquery
修改hello.js

module.exports = function(){     
    var $ = require('jquery');
    $(function(){
        $("body").html("<h1>Hello World!</h1>  jquery version: " + $.fn.jquery);
    })
};
修改main.js

var hello = require('./hello.js')
hello();
重新打包

browserify main.js -o bundle.js
运行效果

2. Glup

第一步: 创建npm说明文件 package.json

npm init
填写 项目的名称、描述、作者等信息 ( 输入完成一项后回车输入下一项 )

注意:
  1. 项目名必须全小写
生成的package.json文件

{
  "name": "ee",
  "version": "1.0.0",
  "description": "hello",
  "main": "main.js",
  "scripts": {
    "test": "testTT"
  },
  "author": "cx",
  "license": "ISC"
}

注意:
  1. JSON文件不支持注释

第二步: 安装gulp

npm install --g gulp
npm i --save-dev gulp gulp-rename gulp-browserify
  1. gulpfile.js 配置文件
var gulp = require('gulp');
var rename = require('gulp-rename');   // 重命名
var uglify=require('gulp-uglify');   //  js压缩
var watch=require('gulp-watch');  // 监视
var less=require('gulp-less');  // 编译less
var minifyCss = require("gulp-minify-css");  // 压缩CSS
var minifyHtml = require("gulp-minify-html");  // 压缩html
var jshint = require("gulp-jshint");  // js检查
var imagemin = require('gulp-imagemin');
var pngquant = require('imagemin-pngquant');   //  png图片压缩插件
var connect=require('gulp-connect');  //  引入gulp-connect模块 
var browserify = require('gulp-browserify');  // browserify
var stringify = require('stringify');  // require('./hello.html')



# 默认执行default任务
gulp

# 执行build任务
gulp build


#gulp.series:串行
#gulp.paralle:并行
错误:ReferenceError: primordials is not defined
原因:node版本与gulp版本不兼容
解决:回退node版本
错误:AssertionError [ERR_ASSERTION]: Task function must be specified
原因:gulp 4.0 的语法变了
解决:

安装gulp-sass
  npm install gulp-sass --save-dev
安装js压缩插件
  npm install gulp-uglify --save-dev
安装文件合并插件
  npm install gulp-concat --save-dev
安装html压缩插件
  npm install gulp-htmlmin --save-dev
安装搭建本地服务器插件
  npm install gulp-connect --save-dev

css.js(处理scss文件)

const { src, dest } = require('gulp');
const sass = require('gulp-sass');
function css() {
  return src('./src/static/scss/*.scss', { sourcemaps: true })
         .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError))
         .pipe(dest('./test/css', { sourcemaps: true }))
}
exports.css = css;

script.js

const { src, dest } = require('gulp');
const concat = require('gulp-concat');
var uglify = require('gulp-uglify');

function script() {
  return src('./src/static/script/utils/*.js', { sourcemaps: true })
         .pipe(concat('lib.min.js')) // 将utils文件夹下的js文件合并到成一个文件lib.min.js
         .pipe(src('./src/static/script/*.js', { sourcemaps: true }))
         .pipe(uglify()) // 压缩js文件
         .pipe(dest('./src/js', { sourcemaps: true }))
}
exports.script = script;

copy.js (用于生成dist)

const { src, dest, parallel } = require('gulp');
var htmlmin = require('gulp-htmlmin');
function copyCSS() {
  return src('./src/css/*.css')
         .pipe(dest('./dist/css'))
}
function copyJs() {
  return src('./src/js/*.js')
         .pipe(dest('./dist/js'))
}

    function copyHtml() {
      return src('./src/*.html')
             .pipe(htmlmin({
                removeComments: true,//清除HTML注释
                minifyJS: true,//压缩页面JS
                minifyCSS: true //压缩页面CSS
              }))
             .pipe(dest('./dist/'))
    }
    exports.copy = parallel(copyCSS, copyJs, copyHtml);

index.js(gulp执行的入口文件)

const { series, parallel, watch } = require('gulp');
const { css } = require('./css.js'); 
const { script } = require('./script.js');
const { copy } = require('./copy.js');
var connect = require('gulp-connect');

function autoWatch() {
  watch('./src/static/scss/*.scss', css);
  watch('./src/static/script/*.js', script);
 watch(watchPath, series(watchCallback))
}
var watchPath = ['./src/*.html','./src/css/*.css','./src/js/*.js'];
function watchCallback(){
  return src(watchPath)
      .pipe(connect.reload());
}
function server(cb) { // 本地服务器
  connect.server({
    port: 6001,
    root: 'src',
    livereload: true
  });
  cb();
}

exports.autoWatch = series( server, autoWatch);
exports.build = copy; 
// 执行gulp build 就可以生成一个dist文件夹,里面有css,js,html文件

// gulp autoWatch 启动本地服务器,然后启动监听任务

创建hello.html

<!-- hello.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>hello world</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <span style="color:blue">你好</span>
  </body>
</html>

修改hello.js

module.exports = function(){     
    var $ = require('jquery');
    $(function(){
        $("body").html(require('./hello.html'));
    })
};

代码检查工具 jshint

创建 .jshintrc文件

{
  "noempty": true,
  "nonbsp": true,
  "nonew": true,
  "undef": true,
  "unused": true,
  "trailing": true,
  "maxlen": 120,
  "asi": true,
  "esnext": true,
  "laxcomma": true,
  "laxbreak": true,
  "node": true,
  "globals": {
    "describe": false,
    "it": false,
    "before": false,
    "beforeEach": false,
    "after": false,
    "afterEach": false,
    "Promise": true
  }
}

安装依赖

npm i --save-dev gulp-jshint jshint jshint-stylish

gulpfile.js 配置文件修改

var gulp = require('gulp');
var rename = require('gulp-rename');
var browserify = require('gulp-browserify');
var jshint = require('gulp-jshint');

gulp.task('build', ['lint'], function(){    
    return gulp.src('./main.js')
               .pipe(browserify({
               }))
               .pipe(rename('bundle.js'))
               .pipe(gulp.dest('./'));
});

gulp.task('lint', ['jshint']);
gulp.task('jshint', function(){    
    return gulp.src(['./*.js', '!./bundle.js'])
               .pipe(jshint())
               .pipe(jshint.reporter('jshint-stylish'));
})

gulp.task('default', ['build'], function(){    
    return gulp.watch(['./*.js', '!./bundle.js'], ['build']);
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容