webpack简介

CommonJS和AMD是用于JavaScript模块管理的两大规范,前者定义的是模块的同步加载,主要用于NodeJS;而后者则是异步加载,通过requirejs等适用于前端。npm已跻身主流JavaScript组件发布平台,越来越多的前端项目也依赖于npm上的项目,或者自身就会发布到npm平台。因此,让前端项目更方便的使用npm上的资源成为一大需求。除此之外,如果你的代码里面还有非模块化的部分,那么,webpack也可以兼容,并且是不二选择!

不仅仅如此,webpack还可以编译Less/SASS/CoffeeScript,比如在页面中插入一段HTML,比如修改替换文本文件等等,如下图所示,所以功能很强大。

和seajs\requirejs不一样,webpack是一个在开发阶段进行打包的模块化工具,也就是说不经过打包不能直接在线上使用。

webpack的优点

1.对COMMONJS、AMD、ES6语法做了兼容。

2.对js,css,图片资源都可以打包,可以替代gulp等的工作,比如打包、压缩混淆、图片转base64等。

3.串联式模块加载器及插件机制,有很好的灵活性和扩展性,例如对Coffee,ES6的支持。

4.有独立的配置文件webpack.config.js.

5.可以将代码切割为不同的chunk,实现按需加载,减少了初始化时间。

6.支持SourceUrls和SourceMaps,便于调试

7.强大的Plugin接口,很多内部插件,使用起来比较灵活。支持React的热插拔。

8.webpack使用异步IO并有多级缓存,这样很快,在增量编译上更快。

webpack使用

安装

$ npm install webpack -g

如果是常规项目,一般是把依赖写入 package.json 包:

$ npm init
$ npm install webpack --save-dev

配置

上面说过他有一个配置文件:webpack.config.js,是这样的:

var webpack = require('webpack');
var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');module.exports = {//plugins
    plugins: [commonsPlugin],//entry
    entry: {index : './src/js/page/index.js'},//output
    output: {path: 'dist/js/page',filename: '[name].js'},module: {//loaders
        loaders: [{ test: /\.css$/, loader: 'style-loader!css-loader' },{ test: /\.js$/, loader: 'jsx-loader?harmony' },{ test: /\.scss$/, loader: 'style!css!sass?sourceMap'},{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}]},//resolve
    resolve: {root: 'E:/github/flux-example/src', extensions: ['', '.js', '.json', '.scss'],alias: {AppStore : 'js/stores/AppStores.js',ActionType : 'js/actions/ActionType.js',AppAction : 'js/actions/AppAction.js'}}
};

其中:

1.plugins:插件项目,上面例子的CommonsChunkPlugin 插件是用来提取多个入口文件的公共模块的,然后将公共模块打包到一个独立的文件中去,以便在其它的入口和模块中使用。一个例子:

var webpack = require('webpack');//require webpack
module.exports = {entry:{main1:'./main',main2:'./main.2'},output:{filename:'bundle.[name].js'},plugins: [new  webpack.optimize.CommonsChunkPlugin('common.js', ['main1', 'main2'])]
};

重新打包之后,可以看到多了common.js.

2.entry是页面入口文件配置,output是对应输出项配置(就是入口文件最终要生成什么名字的文件、存放的位置),一个更简单的配置文件webpack.config.js:

module.exports = {entry:'./example1.1',output:{filename:'bundle1.1.js'}
};

打包好了之后,可以看到,生成了bundle1.1.js.

3.module.loaders配置加载器。loader是webpack中一个重要的概念,它是指用来将一段代码转换成另一段代码的webpack插件。为什么需要将一段代码转换成另一段代码呢?这是因为webpack实际上只能处理JS文件,如果需要使用一些非JS文件(比如css文件),就需要将它转换成JS再require进来。上例子,先准备好一个css文件,需要提前安装好css-loader:

安装:

npm install css-loader --save

配置loader:

module.exports = {entry: "./entry.js",output: {path: __dirname,filename: "bundle.js"},module: {loaders: [{ test: /\.css$/, loader: "style!css" }]}
};

更多loader可以看看这里。

4.resolve:绝对路径、自定义扩展名、模块别名的配置。

运行

$ webpack --display-error-details

其他相关的参数介绍:

$ webpack --config XXX.js   //使用另一份配置文件(比如webpack.config2.js)来打包

$ webpack --watch   //监听变动并自动打包

$ webpack -p    //压缩混淆脚本

$ webpack -d    //生成map映射文件

参考:http://webpack.github.io/docs

转载于:https://www.cnblogs.com/linda586586/p/5255404.html

webpack使用笔记相关推荐

  1. webpack 实践笔记(一)--- 入门

    webpack 实践笔记入门(一) [webpack官网文档地址]:(http://webpack.github.io/docs...) [实践工程地址]: (https://github.com/s ...

  2. webpack学习笔记1

    webpack学习笔记1:基本概念 前言: 现在在日常的开发中,webpack已经是必不可少的东西了,现在的需求基本都是用webpack对资源进行打包整合,所以打算写一点关于webpack的东西,这是 ...

  3. webpack学习笔记(三):监听文件变化并编译

    在上一篇webpack学习笔记中主要认识了webpack配置文件中相关的基础配置和命令的执行.这次学习如何在文件发生变化时自动打包编译. 首先,我们来看一下配置文件 const path = requ ...

  4. webpack学习笔记(二):认识配置和命令执行

    在上一篇webpack学习笔记中,直接在命令行中使用npx webpack对项目进行打包时所使用的配置都是默认的,入口文件默认是src目录下的index.js文件,输出文件默认是dist文件夹下的ma ...

  5. webpack简单笔记

    本文简单记录学习webpack3.0的笔记,已备日后查阅.节省查阅文档时间 安装 可以使用npm安装 //全局安装 npm install -g webpack //安装到项目目录 npm insta ...

  6. webpack学习笔记(六):图片打包处理

    本片文章将记录webpack中如何处理图片的打包问题.在介绍图片打包处理之前,先说明一下引入图片的三种方式: 使用背景图片:将一个包裹图片的元素的css中的background属性设置为图片路径 使用 ...

  7. webpack学习笔记(一):认识webpack

    初识webpack 根据官网介绍, webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具.当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图 ...

  8. webpack学习笔记

    看这篇文章的学习总结. webpack工作流程: 1. 配置entry,output. output的配置要注意pubilcPath这个属性,这个属性指明在浏览器中如何加载生成的打包文件.这个属性在加 ...

  9. webpack 优化笔记

    优化可以从哪些方面入手 1.优化开发体验 优化构建速度,项目庞大时构建的耗时比较久 优化使用体验,通过自动化手段完成一些重复工作 2.优化输出质量 减少用户感知到的加载时间,即首屏加载时间 提升流畅度 ...

  10. 我的webpack学习笔记(二)

    前言 上一篇文章我们讲了多页面js的打包,本篇文章我们继续scss的打包. 多页面css单独打包 首先,我们css编写采用的是sass,所以我们先来安装sass-loader以及可以用到的依赖 $ n ...

最新文章

  1. c语言程序改错类型,C语言程序改错总结
  2. suse linux 光纤卡重置,SUSE Linux下查看光纤卡号和操作系统的版本
  3. sqlserⅴer随机函数_sql server 函数--rand() 生成整数的随机数
  4. mysql server5.0使用_sco openserver 5.0.5安装使用mysql4.0.21的方法Windows系统 -电脑资料...
  5. cls certificate.php,php加密解密处理类
  6. 关于JS闭包,作者不详(转)
  7. LFS安装过程记录(1)-准备工作
  8. TokenInsight:BTC新增流量小幅下降,链上活跃度平稳
  9. python下载特别慢-Python3 用 urllib 下载图片非常慢,会是什么原因呢?
  10. 递归--练习6--noi1755菲波那契数列
  11. PHP推流地址获取图片
  12. 开源字体lato fonts
  13. 开源C++/C代码检查工具
  14. carry on till tomorrow
  15. 电驱系列:直流无刷马达(不用芯片,独立元器件搭建)
  16. 隐藏微信右上角的分享按钮
  17. 虚拟 DOM 是什么? 有什么优缺点?
  18. 如何做一个员工管理系统
  19. Tailwind Sidebar
  20. his系统数据备份服务器,医院HIS信息系统数据备份的策略.doc

热门文章

  1. iOS开发之UIAlertController的使用
  2. MacBook 键盘出现故障,如何修复?
  3. 运行在MAMP Pro上的PhP和Mysql更改版本教程
  4. 电商App如何让用户直接打开商品详情页
  5. tomcat的目录结构
  6. 引发电气火灾火警的原因(转载)
  7. 安卓中圆角背景图被拉伸的解决方案——.9.png
  8. 为什么 Java 不支持类多重继承?
  9. 4种软件架构,看看你属于哪个层次!
  10. 轻量通用型互联网应用架构