Webpack入门(详细)
来源:互联网 发布:mp5淘宝 编辑:程序博客网 时间:2024/05/19 13:44
介绍
webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX)、coffee、样式(含less/sass)、图片(压缩)等都作为模块来使用和处理。更具体的学习可以看官方文档https://webpack.js.org/concepts/这里是根据webpack2.0版本的
优点
- webpack 是以 commonJS 的形式来书写脚本,但对 AMD/CMD 的支持也很全面,方便旧项目进行代码迁移。
- 能被模块化的不仅仅是 JS 了,还有CSS,图片等。
- 开发便捷,能替代部分 grunt/gulp 的工作,比如打包、压缩混淆、图片转base64等。
- 并且github上有很多项目是基于webpack构建的
安装
前提条件
在开始前,先要确认你已经安装 Node.js 的最新版本。使用 Node.js 最新的 LTS 版本,是理想的起步。使用旧版本,你可能遇到各种问题,因为它们可能缺少 webpack 功能或缺少相关 package 包。本地安装,先建立webpack-demo文件,在webpack-demo/app下建立index.js(方便测试),再安装webpack
npm install --save-dev webpacknpm install --save-dev webpack@<version>
- 全局安装(可以先全局安装,才能直接使用webpack命令,在具体的项目中局部安装)
npm install --global webpack
注意,不推荐全局安装 webpack。这会锁定 webpack 到指定版本,并且在使用不同的 webpack 版本的项目中可能会导致构建失败。
配置
先生成package.json
npm init
再创建 webpack.config.js
,
每个项目下都必须配置有一个 webpack.config.js
,告诉webpack该干什么。
注意整个配置中我们使用 Node 内置的 path 模块
var path = require('path');module.exports = { // 单页面入口文件 entry: './app/index.js', /* 多入口 entry:['./app/index.js','./app/index1.js'] */ /* 对象 entry:{name: './app/index.js',home: './app/index1.js'} */ // 入口文件输出配置 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }};
运行
- webpack 默认是运行webpack.config.js
命令:
> webpack
最终会在/dist下生成bundle.js文件
- 如果修改webpack.config.js为mywebpack.config.js,则运行需要修改
webpack --config mywebpack.config.js
再运行webpack即可
- 如果你在项目中使用了 npm scripts(在package.json中加入),npm 首先会在本地模块中寻找 webpack。这是一个实用的小技巧。
"scripts": { "start": "webpack --config mywebpack.config.js"}
运行npm run start
即可
- 其它参数
$ webpack --config XXX.js //使用另一份配置文件(比如webpack.config2.js)来打包$ webpack --watch //监听变动并自动打包$ webpack -p //压缩混淆脚本,这个非常非常重要!$ webpack -d //生成map映射文件,告知哪些模块被最终打包到哪里了$ webpack --progress //显示进度条$ webpack --color //添加颜色
其中的 -p 是很重要的参数,曾经一个未压缩的 700kb 的文件,压缩后直接降到 180kb(主要是样式这块一句就独占一行脚本,导致未压缩脚本变得很大)。
插件
- html插件
- 安装
npm install html-webpack-plugin --save-dev
- 使用
var path = require('path');// 引入插件var htmlWebpackPlugin = require('html-webpack-plugin');module.exports = { entry: { home: './app/index.js', work: './app/index1.js' }, output: { filename: 'js/[chunkhash]bundle.js', path: path.resolve(__dirname, 'dist') }, // 插件应用 plugins: [ new htmlWebpackPlugin({ template: 'index.html' }) ]};
- 自动打包插件
module.exports = { // … plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: "commons", filename: "commons.js", minChunks: 2, }), ],// …};
如果有任意模块加载了两次或更多(通过 minChunks 设置该值),它就会被打包进一个叫 commons.js 的文件里,后面你就可以在客户端缓存这个文件了。
开发
实际上 Webpack 有它自己的开发服务器,通过 devServer 对象可以创建一个服务器:
module.exports = { context: __dirname + "/src", entry: { app: "./app.js", }, output: { filename: 'js/[chunkhash]bundle.js', path: path.resolve(__dirname, 'dist') }, devServer: { contentBase: __dirname + "/src", },};
运行
// 安装npm install --save-dev webpack-dev-server// 运行webpack-dev-server
如果不能运行,尝试
node_modules/.bin/webpack-dev-server
服务器现在就运行在了 localhost:8080 上。
Loader
目前为止,我们所讲到的都是关于 JavaScript 代码的使用。从 JavaScript 代码开始是非常重要的,因为 这是 Webpack 唯一使用的语言 。我们可以处理任何文件类型,只要将它们传进 JavaScript 代码中。这个功能用 Loaders 来实现。
一个 loader 可以指向一个像 Sass 的预处理器,或者像 Babel 的编译器。
安装使用步骤
1. install loader2. module中配置
Babel+ES6
- 安装
npm install --save-dev babel-loadernpm install babel-core --save-dev// 安装ES2015支持npm install babel-preset-es2015 --save-dev
- 配置
var path = require('path');var htmlWebpackPlugin = require('html-webpack-plugin');module.exports = { entry: './src/app.js', output: { filename: 'js/bundle.js', path: path.resolve(__dirname, 'dist') }, plugins: [ new htmlWebpackPlugin({ template: 'index.html' }) ], module: { rules: [{ test: /\.js$/, use: ['babel-loader'], options: { presets: ['es2015'] } } // Loaders for other file types can go here ],};
这样就完成了
css-loader
- install
npm install css-loader style-loader --save-dev
- 配置
module: { rules: [{ test: /\.js$/, loader: 'babel-loader', options: { presets: ['es2015'] } }, { test: /\.css$/, use: ['style-loader', 'css-loader'] } // Loaders for other file types can go here ],
sass-loader
- 安装。由于需要node-sass配合,也一起安装
npm install sass-loader --save-devnpm install node-sass --save-dev
如果不成功,可以用淘宝镜像安装
npm install --save node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist --sass-binary-site=http://npm.taobao.org/mirrors/node-sass
- 配置
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader']}
常用loader
处理样式,转成css,如:less-loader, sass-loader
图片处理,如: url-loader(以base64显示), file-loader,image-webpack-loader(压缩图片)。(url-loader、file-loader)两个都必须用上。否则超过大小限制的图片无法生成到目标文件夹中
处理js,将es6或更高级的代码转成es5的代码。如: babel-loader,babel-preset-es2015,babel-preset-react
将js模块暴露到全局,如果expose-loade
- Webpack入门(详细)
- webpack 入门,超详细
- webpack入门(一)
- webpack入门(二)
- webpack入门(三)
- webpack入门(四)
- webpack入门(五)
- webpack入门(1)
- webpack入门(2)
- webpack 入门一篇足够,简单而又详细入门
- 前端自动化构建工具Webpack开发模式入门指南 (网上看到的,写得很详细)
- webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(代码、入门篇)
- react+webpack入门(2)
- webpack入门学习(—)
- Webpack入门
- webpack 入门
- webpack 入门
- webpack入门
- 待了解的知识
- Windows Server 2012 / 2016 安装 .Net Framework 3.5失败
- 表格隔行变色
- kotlin学习笔记(六)
- 线程的创建、等待、终止以及属性
- Webpack入门(详细)
- 浅谈React官网学习笔记
- 关系数据库
- ThinkPHP3.2.3选择多个CheckBox删除多条数据的实现(使用AJAX提交数据)
- SQL语句
- hdu 1269-tarjan算法
- EntityFrameworkCore初步使用
- 设计模式--代理模式
- jQuery序列化表单的方法总结(serialize()、serializeArray())