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. OpenCV中IplImage图像格式与BYTE图像数据的转换

    最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...

  2. Python 3.x 连接数据库(pymysql 方式)

    ==================pymysql=================== 由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 ...

  3. Lr中关于字符串的截取

    Action() { char separators[] = "\"processId\":\"";//截取条件 char * token; char ...

  4. java的关闭钩子(Shutdown Hook)

    Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...

  5. 「LeetCode」全部题解

    花了将近 20 多天的业余时间,把 LeetCode 上面的题目做完了,毕竟还是针对面试的题目,代码量都不是特别大,难度和 OJ 上面也差了一大截. 关于二叉树和链表方面考察变成基本功的题目特别多,其 ...

  6. Sass 的调试

    Sass 的调试 Sass 调试一直以来都是一件头痛的事情,使用 Sass 的同学都希望能在浏览器中直接调试 Sass 文件,能找到对应的行数.值得庆幸的是,现在实现并不是一件难事,只要你的浏览器支持 ...

  7. JSP复习整理(三)基本语法续

    查看注册后的信息: TestBean.java package com.hai.xaio.cn; public class TestBean { public String userName; pub ...

  8. C# 类使用小demo

    太晚了,不说了,直接上图 运行结果

  9. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  10. git 安装教程

    昆,简单说下安装教程1,安装Git2,安装TortoiseGit3,打开第一步安装的git工具GIT BASH