好用的打包工具webpack

<什么是webpack>

webpack是一个模块打包器,任何静态资源(js、css、图片等)都可以视作模块,然后模块之间也可以相互依赖,通过webpack对模块进行处理后,可以打包成我们想要的静态资源。

gulp的打包是将js、css、图片等分开打包的,但是webpack是将所有的静态资源打包到一起,因此一个请求就可以了。

<webpack的特点>

·支持CommonJs(require的写法)和AMD模块,也就是说基本可以无痛迁移旧项目

·支持模块加载器和插件机制,可对模块灵活定制,特别是babel-loader,有效支持es6

·可以通过配置,打包成多个文件。有效利用浏览器的缓存功能提升性能。将公用的东西抽离出来,比如jQuery等

·将样式文件和图片等静态资源视为模块进行打包。配合loader加载器,支持sass、less等css预处理器

·内置有source map,即使打包在一起也方便调试

<webpack的安装>

1,先全局安装

npm install webpack -g

·webpack -w  提供watch方法,实时进行打包更新

·webpack -p 对打包后的文件进行压缩

·webpack -d 提供sourcemap,方便调试

·webpack --config 以某个config作为打包

·webpack --help 更多命令

2,再本地安装

npm init 先初始化一下,生成package.json。再安装,这样可以方便的查看依赖的文件

npm install webpack --save-dev 开发式依赖,一些打包工具,像gulp、webpack等都是开发式依赖,上线时并不需要

<webpack初体验>

比如说所有的文件打包到bundle.js中,则要在页面中引入bundle.js

webpack ./entry.js bundle.js   //编译entry.js并打包到bundle.js

<模块依赖>

·webpack会分析入口文件,解析包含依赖关系的各个文件

·这些文件(模块)都打包到bundle.js文件中

·webpack会给每个模块分配一个唯一的id并通过这个id索引和访问模块

·页面启动时先执行entry.js代码,其他的模块会在require时懒加载

<loader加载器>

·webpack本身只能处理JavaScript模块,如果要处理其他类型的文件,就需要使用loader进行转换

·Loader可以理解为是模块和资源的转换器,可以转换任何类型(jsx、jade等)的模块

·Loader可以通过管道方式链式调用,每个loader可以把资源转换成任意格式并传递给下一个loader,但是最后一个loader必须返回JavaScript,因为webpack只认识js。不同的文件,使用的loader也不一样

·Loader可以接受参数,以此来传递配置项给loader。

·Loader可以通过npm安装

·Loader可以通过文件扩展名(或正则表达式)绑定不同的加载器

<加载css文件>

安装两个loader:npm install css-loader style-loader

·首先将style.css也看作一个模块

·用css-loader来读取它

·用style-loader把它内嵌到html中

在entry.js中引入:

require("css!./style.css")//相当于require("css-loader!.style.css").因为css-loader的-loader是固定的,所以一般省略-loader。/*将原始的css通过css-loader读出来,需要传递给style-loader。所以该require还需要补充为如下所示:*/require("style!css!./style.css")//!相当于gulp中的流一样,从右向左依次流动

再次执行

webpack ./entry.js bundle.js   编译entry.js引入的样式文件打包到bundle.js

<加载图片url-loader>

url-loader会将样式中引用到的图片转为模块来处理

npm install url-loader

limit的参数意思是图片大小小于这个限制的时候,会自动启用base64编码图片

<配置文件>

·webpack在执行的时候可以通过指定的配置文件

·默认情况下会执行当前目录中的webpack.config.js,当输入webpack时,会自动寻找该文件。

·配置文件是一个node.js模块,返回一个json格式的配置信息对象

·添加配置文件,然后执行webpack --progress --colors就可以了

配置文件格式为:

var webpack = require("webpack")
module.exports = {
 entry:"./entry.js",//指定打包的入口文件,每个键值对,就是一个入口文件。
 output:{//配置打包结果
            path:__dirname,//定义了输出的文件夹
            filename:"bundle.js"//定义了打包结果文件的名称
 },
 module:{//定义了模块的加载逻辑
         loaders:[//定义了一系列的加载器
             {test:/\.css$/,loader:"style!css"},//当需要加载的文件匹配`test`的正则时,就会使用相应的loader
        {test:/\.(png|jpg)$/,loader:"url?limit=40000"},
        {test:/\.js?$/,loader:"babel",exclude:/node_modules/,query:{compact:false,presets:[‘es2015‘]}}//对于所有的js文件,用babel-loader
                                                                 //进行加载,忽略node_modules下面
                                                                // 的js文件。query表示参数,相当于
                                                                // url-loader的?形式。
         ]
 },
 plugins:[//插件的使用一般在webpack配置信息plugins选项中指定,我们可以向生成的打包文件头部插入一些信息
   new webpack.BannerPlugin("//叮呤在学习webpack"),//向打包之后的文件头部添加注释信息
   new webpack.optimize.CommonChunkPlugin("common.js")//把多个模块中的公共部分,单独提取出来,单独加载
 ],
 resolve:{
     alias:{//别名,它的作用是把用户的一个请求重定向到另一个路径
        jquery:"./js/jquery.js" //这样,在使用jQuery的组件中只需要require("jquery")即可,而不再需要逐级去寻找jQuery的存放位置
     }
 }
}

  ·expose,如果想在前台使用打包的jQuery,需要把jQuery暴露出来,先安装该模块 npm install expose-loader --save-dev

  eg:把$作为别名为jquery的变量暴露到全局上下文中require("expose?$!jquery"),在引入jquery的时候,把jQuery对象绑定到window的$上面

  ·entry属性可以使一个对象,而对象名也就是key,会作为下面output的filename属性的name

  entry:{

    bundle1:"./entry1.js",

    bundle2:"./entry2.js"

  }

  output:{

    path:__dirname,

    filename:"[name].js"//此处的[name]就表示bundle1和bundle2

  }

  假如bundle1和bundle2都包含有功能相同的部分,则可以把这部分提取出来

  ·公共模块。我们利用插件可以智能的提取公共部分,以提供我们浏览器的缓存复用

  plugins:[

      new webpack.optimize.CommonChunkPlugin("common.js")//把多个模块中的公共部分,单独提取出来,单独加载

      ]

  我们需要手动在html上加载common.js,并且是必须最先加载

<使用es6>

npm install babel-core --save-dev

npm install babel-loader --save-dev

npm install babel-preset-es2015

<webpack-dev-server>

npm install webpack-dev-server -g

安装好之后,执行webpack-dev-server,在当前目录启动一个express服务,会自动打包和实时刷新

<与webpack相比gulp的优势>

webpack不可以做自动部署和代码检查,webpack只是个打包工具。所以可以采用gulp与webpack混合使用的方法

var gutil = require("gulp-util");
var webpack = require("webpack");
var webpackConfig = require("./webpack.config.js");
gulp.task("webpack",function(callback){
   var myConfig = Object.create(webpackConfig);
   webpack(myConfig,function(err,stats){
      callback();
   })
})
gulp.task("default",function(){
  gulp.watch("./**",["webpack"]);
})
时间: 2024-10-13 16:15:47

好用的打包工具webpack的相关文章

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

背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.做网页就和用world编辑一个文档一样,只不过那个工具叫Dreamweaver.一个html页面,夹杂着css,javascript是再常见不过的事了. 随着前端的不断发展,特别是单页应用的兴起,这种所见即所得的IDE工具,就渐渐地退出了前端的主流.一个应用,通常只有一个静态页面(index.html),甚至这个页面的body只有一个或少数几个div组成.这时有

打包工具webpack安装&#183;Mac

最近在学Vue.js,是我接触的第一个前端框架.本来感觉还不错,各种惊叹于它可以用很少的代码写出那种具备交互能力的神奇模块. 在学的过程中总是能碰到一个叫webpack的单词,查过,是一个模块打包器,由于Vue的官方文档总是很温馨的提示说要是以前没接触过这个,可以暂时跳过,所有一直都没深入去了解. 可是当我学到一个叫单文件组件的东西的时候,发现不去了解webpack真的寸步难行,于是……今天炸了一天??,因为mac系统的操蛋特性(不全是),就单单是安装webpack这一个操作跳出的error数量

webpack打包和gulp打包工具详细教程

30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解babel-loader加载器的含义 六:了解下webpack的几个命令 七:webpack对多个模块依赖进行打包 八:如何独立打包成样式文件 九:如何打包成多个资源文件 十:关于对图片的打包 十一:React开发神器:react-hot-loader 回到顶部 什么是webpack? 他有什么优点?

Webpack打包工具学习使用

Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载.通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块. AMD 模块. ES6 模块.CSS.图片. JSON. Coffeescript. LESS 等. 一.核心概念 入口:webpack打包的入口文件 输出:这个就是对源代码打包之后,得到的文件,文件我们一般命名为

超简单 webpack 打包工具入门

对前端这个岗位来说,模块化开发是必须要走的一个过程,这其中打包工具的使用必不可少,下面我就说一下 webpack 打包工具的用法,非常简单,学会它,webpack 你就入门了. 使用 webpack 前,你需要准备什么? 安装 node 淘宝镜像 cnpm(最好有) 安装 webpack 如果前两步你都已经有了,那么可以直接跳转到第三步,安装 webpack 命令行如下: 1.全局安装 webpack cnpm install -g [email protected] 这里你可以指定版本安装,也

vue 之webpack打包工具的使用

一.什么是webpack? webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个.vue文件中都可能html.js.css甚至是图片资源:并且由于组件化,这些.vue文件之间还有错综复杂的关系.所以项目要被浏览器识别,我们就要使用webpack将它们打包成js文件以及相应的资源文件. 二.webpack的功能? 1.它可以吧CSS,JS图片当做模块来处理 2.它可以吧以上的这些文件进行打包压缩成一个JS文件,减少了

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

为什么要模块化 javascript跟其他开发语言有很多的区别,其中一个就是没有模块化概念,如果一个项目中有多个js文件,我们只能通过script标签引入的方式,把一个个js文件插入到页面,这种做法会也引起了很多弊端: 需要手动维护JavaScript的加载顺序 多次请求资源,影响了加载速度 在每个script标签中,顶层作用域即全局作用域,如果没有任何处理而直接在代码中进行变量或函数声明,就会造成全局作用域的污染,也会造成命名冲突. 模块化很容易就避免这些问题,避免冲突,合并资源减少网络开销,

详解前端模块化工具-Webpack

React自发布以来吸引了越来越多的开发者,React开发和模块管理的主流工具webpack也被大家所熟知.那么webpack有哪些优势,可以成为最主流的React开发工具呢? Webpack是什么 CommonJS和AMD是用于JavaScript模块管理的两大规范,前者定义的是模块的同步加载,主要用于NodeJS:而后者则是异步加载,通过requirejs等工具适用于前端.随着npm成为主流的JavaScript组件发布平台,越来越多的前端项目也依赖于npm上的项目,或者自身就会发布到npm

前端模块化工具-webpack

详解前端模块化工具-webpack webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不在,这时,使日渐增多的js代码变得合理有序就显得尤为必要,也应运而生了很多模块化工具.从服务器端到浏览器端,从原生的没有模块系统的`<script>`到基于Commonjs和AMD规范的实现到ES6 modules.为了模块化和更好的模块化,我们总是走在探索的路上. 但是这些实现模块化的方法或多或