webpack

  • 是一个【模块化管理工具】兼【打包工具】

  • 是一个工具(和seajs,requirejs管理前端模块的方式是不一样)

  • 在webpack一个文件就是一个模块!

  • seajs,requirejs

    • 模块化!
  • webpack也能对前端资源进行模块化管理!

    • 不是某个要在页面引入的js文件
    • 是一个工具
    • webpack允许我们在前端代码像node代码一样去引入一个包(文件)
    • webpack会把我们写的类似node的模块化方式,做转换,使其他能够以浏览器中运行
    • module.exports = '小明' // xx.js
    • require('./xx.js') // a.js

安装webpack

  • npm install -g webpack

    • 带-g参数表示全局安装!
  • 通过webpack来管理我们的代码,那么我们的代码一般是不会暴露到全局的!


基本使用

  • 我们在前端代码像使用node代码一样用module.exports及require来管理(描述)模块的依赖关系,

    但是这样的代码是不能直接在浏览器中运行的
    var myjack = require('./jack.js')
var myrose = require('./rose.js')
console.log(myjack.money)
  • 我们需要使用webapck来管理(转换)我们的代码,使其符合浏览器的规则!

    • webpack <入口文件名> <输出文件名>
    • webpack会把我们在代码所依赖的文件(通过require获取的文件)合并到一起!
    • 并且【不会产生全局变量】(除非显示的通过window点一个属性)

通过配置文件的方式使用webpack

  • 在项目目录添加:webpack.config.js文件
  • 在文件中添加以下内容
    // 这是webpack的配置文件
// 每次修改完或着新增,都要重新编译,敲得代码太长,所以模块化一下
// 要求在这个文件中暴露一个对象,按照node 的请求去写就行啦 module.exports = {
// 这个属性表明,整个项目的入口文件是谁
entry:'./src/app.js',
// 这个属性表示,我们项目通过webpack打包后的输出文件及输出路径
output:{
filename:'./dist/bundle.js' // 指定输出的文件名
}
}
  • 直接在当前目录的命令行,执行命令:webpack就可以了!

将css也合并到js代码中

css-loader 和 style-loader

  • css-loader,把css合并到js中(没有添加dom操作,也就是没把css添加到页面中)

    +npm install css-loader --save-dev
  • style-loader,把css-loader处理的结果添加到页面(dom)中

    +npm install style-loader@0.13.1 --save-dev

    +注意:这里的命令一定要指定版本号,否则出错
  output:{
filename:'./dist/bundle.js' // 指定输出的文件名
},
module:{
loaders:[ // Loaders是提供了一些特定的功能
{
// 表明我们(用到的loader)要处理的文件是什么
test:/\.css$/, // 要把指定的css加入到js中 // loader属性指定具体的loader,这个loader其实是一个npm外
// css-loader就是一个npm 包!
// `npm install css-loader --save-dev`
// css-loader只是把css代码加入到js代码(并没把样式添加到dom中)
// style-loader 这个loader这为了把css-loader得到css样式添加到dom中
//
// webpack会先调用!右边的包来处理我们的文件,然后把!右边处理的结果交给左边的包来处理!
loader:'style-loader!css-loader'
}
]
}

less-loader

  • 作用: 这个loader会读取匹配的less文件,然后把less文件内容转换为css内容

    一般会配合css-loader 和 style-loader一起使用!
  • 注意,下载less-loader会缺少一个less包:npm install less --save-dev,这个需要另外单独安装!
   require('./xxx.less') // 用到的less文件要引入才能生效!
  module.exports = {
entry: './src/app.js',
output:{
filename:'./dist/bundle.js'
},
module:{
loaders:[
{
test: /\.less$/ ,// 匹配当前loader要处理的文件
// less-loader作用:是读取test规则对应的文件,然后把读取到的less文件内容转换为css内容
loader:'style-loader!css-loader!less-loader'
}
]
}
}

sass-loader

  • 安装: npm install sass-loader --save
  • 作用: 这个loader会读取匹配的scss文件,然后把less文件内容转换为css内容
  • 注意,sass-loader的依赖包node-sass和webpack不会自动安装上

    需要手动安装:npm install node-sass webpack --save-dev

url-loader

  • 作用: 是能css中使用的图片进行处理,如果图片比指定的条件小,就转换为base64

    如果比指定的条件大就不转换
  • 注意,安装时会缺少一个file-loader包:npm install file-loader --save-dev
    • 这个file-loader里会对文件操作!
  • css: bg:url()
  • 在css中有好小图标,可能有100个,浏览器会再发100个请求!
  • 如果能够把这个100个请求合成1个,或者0个就更好了!
  • 注意:只能够处理css的图片,为什么要处理css的图片呢,因为css图片更多的时候是图标,而html中

    直接写一个img的话,一般图片是比较大的,不需要转换为base64,转换的话反而得不偿失,如果是html

    图片的话,我们用的是懒加载来解决问题

// base64

  module.exports = {
// 指定入口文件
entry:'./src/app.js',
output:{
path:'dist',// path指定父目录,webpack会把path与filename拼接成一个路径
// 同时是指定默认文件的生成目录
filename:'bundle.js'
},
module:{
loaders:[
// 这里要分开写,写两个loader,因为他们用法不一样,一个用来css语法转换,
// 一个用来css里面的图片转换
{
test: /\.css$/,
loader:'style-loader!css-loader',// 从右往左执行!
},
{
test:/\.(jpg|jpeg)/,
// 这里的./是相对于path属性指定的目录
// name参数指定如果不生成base64时,文件的输出目录及输出的文件
// [name]表示原文件名,[ext]表示源文件扩展名
// 如果不指定name参数,输入的图片名是随机的 // limit: 限制转换的大小
// 值的单位是字节,byte
// 1byte = 8bit (位) 字节
// 1kb = 1024 字节
// 1M = 1024kb
// 1000
loader:'url-loader?limit=12048&name=./img/[name].[ext]'
}
]
}
}

babel-loader

  • babel-loader依赖于babel这个工具!,是在webpack中使用的,可以进行多种语法转换!

    • babel是独立的一款工具,可以用来进行多种语法转换,
    • 补充:在浏览器直接引入Browser.js也可以进行语法转换,但是转换性能比较 低一些
  • 写代码时,用es6,在写完之后,再用工具转换为es5(为什么要写es6呢,因为我想体验es6的简洁写法,

    那为什么又要转换为es5呢,因为浏览器的兼容性问题)

  • 安装npm install babel-loader --save-dev

  • *注意:安装时还需要安装babel-core,:

  • npm install babel-core@6.0.0 webpack --save-dev* 你也可以根据提示,看看提示你缺什么,你就安装什么

  • 具体版本号,看提示

  • 如果是对es6进行请求转换,还需要安装:

    npm install babel-preset-es2015 --save-dev

    // 最终这个配置文件 是由node去解析

const path = require('path')   //需要引入path模块
const webpack = require('webpack') module.exports = {
// 入口文件目录
// 因为我们要分开打包,所以不止一个入口
entry:{
// 在这里写路径的时候推荐把绝对路径也写上,把路径完整地写上来
// 在任何模块文件内部,可以使用__dirname变量获取当前模块文件所在目录的完整绝对路径
app:path.join(__dirname, 'src/app.js'), // 随便写一个属性,值为数组,数组中的元素是我们希望单独打包的第三方包的名字
vender001:['angular']
}, // 输入路径
output:{
// 输出的文件目录
path: path.join(__dirname, 'dist'),
// 输出的文件名(也就是打包后的文件)
filename:'bundle.js'
},
module:{
// 这里是我们webpack打包用到的loaders
loaders:[
{
test:/\.js$/,
// 也需要一些参数,babel不仅仅是能转换es6,还能将react的语法转换成js,
// 所以我们要通过query这个属性来指定一下转化为那种
loader:'babel-loader',
query:{
// 这个es2015也是对应了一个npm 包
// npm install babel-preset-es2015 --save-dev
presets:['es2015'] //这个presets是babel里面的一个属性
}
}
]
}
}

对第三方包进行分离

  • 这个分离不是必须的
  • 把我们项目用到的包(如果有第三方包,我们分打包合并!)
  • 一个可以利用浏览器缓存对第三方包进行缓存!
  • 其实就是我们自己写的文件打一个包,其他第三方我文件打一个包!

// 入口文件目录
entry:{ app:path.join(__dirname, 'src/app.js'), // 随便写一个属性,值为数组,数据中的元素是我们希望单独打包的第三方包的名字
vender001:['angular']
}, // 输入路径
output:{
// 输出的文件目录
path: path.join(__dirname, 'dist'),
// 输出的文件名(也就是打包后的文件)
filename:'bundle.js'
},
// 这个属性里写上webpack中要使用到的插件
plugins:[
// 要使用webpack自的插件来分离第三方包
new webpack.optimize.CommonsChunkPlugin(
// 第一个参数,就是我们在entry写的一个属性名
// webpack会自动读取对应的值,找到相应的包
'vender001',
// 第二个参数,是第三方包单独打包后生成的文件名
'vender.js'
)
]

webpack 插件

自动打开浏览器插件(open-browser-webpack-plugin)

创建index.html插件(html-webpack-plugin)

  // npm install html-webpack-plugin --save-dev
const HtmlWebpackPlugin = require('html-webpack-plugin');
plugins:[
new HtmlWebpackPlugin({
template:'./src/index.html' // 指定模板,最终生成的html会生成到path属性对应的位置
})
]

删除目录插件(clean-webpack-plugin)

拷贝文件插件(copy-webpack-plugin)

webpack 相关参数

    1. --watch,自动监视文件,重新打包
    1. --progress 在打包进可以看到进度
    1. -p 压缩js代码
    1. -d 生成js代码对应的.map文件(

      当我们打调试工具时,浏览器会自动请求与压缩的js文件同级目录的js文件名.map文件

      这个文件中的内容表示我们的代码是如何压缩的!)

模块化管理工具兼打包工具 webpack的更多相关文章

  1. 1.webpack-----模块加载器兼打包工具

    一.webpack的优势 1. 能模块化 JS . 2. 开发便捷,能替代部分 grunt/gulp 的工作,比如打包.压缩混淆.图片转base64等. 3. 扩展性强,插件机制完善,特别是支持 Re ...

  2. js模块化方案以及前端打包工具

    图片来自知乎

  3. Webpack与其他打包工具的区别

    webpack是一个模块化加载器兼打包工具,它同时支持AMD.CMD等加载规范.与其他模块化加载器相比,它有这些优势: 1.代码分割 webpack支持两种依赖加载:同步和异步.同步的依赖会在编译时直 ...

  4. Webpack实战(一):Webpack打包工具安装及参数配置

    为什么要模块化 javascript跟其他开发语言有很多的区别,其中一个就是没有模块化概念,如果一个项目中有多个js文件,我们只能通过script标签引入的方式,把一个个js文件插入到页面,这种做法会 ...

  5. Linux中常用压缩打包工具

    Linux中常用压缩打包工具 压缩打包是常用的功能,在linux中目前常用的压缩工具有gzip,bzip2以及后起之秀xz.本文将介绍如下的工具常见压缩.解压缩工具以及打包工具tar. gzip2 直 ...

  6. Webpack:前端资源模块化管理和打包工具

    一.介绍: Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生 产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再 ...

  7. webpack模块化管理和打包工具

    Webpack简介 webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际 需要的 ...

  8. Webpack打包工具学习使用

    Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载.通过 ...

  9. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

随机推荐

  1. bzoj4692: Beautiful Spacing

    先二分答案后dp 设\(su[n]\)为\(\sum_{1}^{n}xi[i]\) 设\(f[n]\)为1时表示第n个单次能做某一行的结尾,且之前的空格满足二分出来的答案. 考虑怎样的\(f[i]\) ...

  2. 学习 opencv---(4) 分离颜色通道 && 多通道混合

    上篇文章中我们讲到了使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作. 而为了更好地观察一些图像材料的特征,有时需要对R ...

  3. BZOJ 3771: Triple

    Description 问所有三/二/一元组可能形成的组合. Sol FFT. 利用生成函数直接FFT一下,然后就是计算,计算的时候简单的容斥一下. 任意三个-3*两个相同的+2*全部相同的+任意两个 ...

  4. python之路十二

    本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...

  5. scrapy加载cookies登陆

    import scrapy from xxxx.items import XXXXItem from scrapy.http.request import Request class ZndsSpid ...

  6. MVC安全防护

    一.XSS攻击 跨域脚本攻击(Cross Site Scripting),恶意植入前端代码,比如HTML代码和客户端脚本,异常js获取用户cookie然后跳转到别的站点. 防护措施 标签转换(如&qu ...

  7. git 命令熟悉

    1. git clone +ssh 地址=将远程代码download 到本地:要在根目录执行这个操作 2.查看所有分支:git branch -a (当前分支前带星号) 3.切换到某个分支:git c ...

  8. lanmp之一 (动静分离)

    一.lanmp--需求篇 1. 准备两台centos 6,其中一台机器跑mysql,另外一台机器跑apache,nginx + php 2. 同时安装apache和nginx,其中nginx启动80端 ...

  9. $_session (应用)

    登录: 封装类(用于连接数据库)代码中创建一个对象最好可以重复使用 <?php class DBDA { public $host="localhost"; public $ ...

  10. 【Juicer】 一个高效、轻量的前端 (Javascript) 模板引擎

    引用地址:http://juicer.name/docs/docs_zh_cn.html * 一个完整的例子 HTML 代码: <script id="tpl" type=& ...