webpack入门和基础配置
2017-07-07 11:04
555 查看
webpack安装和命令行
第一步 初始化(我这里使用的是淘宝镜像cnpm)
cnpm init
第二步 安装webpack
cnpm install webpack --save-dev
第三步 安装处理css的loader
cnpm instal css-loader style-loader --save-dev
第四步 在hello.js中引入其他文件,hello.js作为打包时的入口
require('./world.js'); require('style-loader!css-loader!./style.css'); /* 这里的loader也可以直接在命令行中写,即 webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader' 使用的是webpack的参数“--module-bind” */
第五步 打包,将多个文件打包进hello.bundle.js里
webpack hello.js hello.bundle.js
一些参数
观测文件改变,自动打包--watch
webpack hello.js hello.bundle.js --watch
打包百分比读条
--progress
webpack hello.js hello.bundle.js --progress
显示打包的模块loader
--display-modules
webpack hello.js hello.bundle.js --progress --display-modules
打包原因
--display-reasons
webpack hello.js hello.bundle.js --progress --display-modules --display-reasons
webpack基本配置
新建配置文件webpack.config.jsmodule.exports = { entry: './src/js/main.js', output: { path: './dist/js', filename: 'bundle.js' } }
在控制台中输入webpack默认会执行这个脚本,也可以指定
--config来选择脚本
entry入口可以单个也可以多个,多个时需要打包在不同的js中。
[hash]是本次打包的哈希;
[chunkhash]是每个文件的哈希,文件内容改变时才会改变
生成项目中的html页面
首先安装html-webpack-plugin插件:
cnpm install html-webpack-plugin --save-dev
如何使用
//首先引入 var htmlWebpackPlugin = require('html-webpack-plugin'); plugins: [ new htmlWebpackPlugin({ template: 'index.html', //以这个为模板生成页面 // filename: 'index-[hash].html', //为生成的html文件指定名称 filename: 'index.html', inject: false, //规定js插入是在头部还是body把标签里,默认是body尾部,改为false时不插入 title: 'webpack is good', //设置属性,用于在模板(template)里调用 date: new Date(), minify: { removeComments: true, // 删除注释 collapseWhitespace: true // 删除空白 } }) ]
支持ejs模板语法,直接在html中使用
<head> <meta charset="UTF-8"> <!--在这里调用了在webpack.config.js里设置的title--> <title><%= htmlWebpackPlugin.options.title %></title> <script type="text/javascript" src="<%= htmlWebpackPlugin.files.chunks.main.entry %>"></script> </head> <body> <% for (var key in htmlWebpackPlugin) { %> <%= key %> <% } %> </body>
生成多页面
多次使用new htmlWebpackPlugin()并配置相关参数。
new htmlWebpackPlugin({ template: 'index.html', filename: 'b.html', inject: 'body', title: 'this is b', // chunks: ['b'], //为该页面指定要包含的js excludeChunks: ['a', 'c'] //为该页面指定要排除的js }), new htmlWebpackPlugin({ template: 'index.html', filename: 'c.html', inject: 'body', title: 'this is c', // chunks: ['c'], excludeChunks: ['a', 'b'] })
将js直接插入页面
<%= compilation.assets[htmlWebpackPlugin.files.chunks.main.entry.substr(htmlWebpackPlugin.files.publicPath.length)].source() %>
处理项目中的资源文件
什么是loader
处理资源文件的工具,特性:1.可以是串联的,2.可以是同步或是异步的,3.可以接受参数,4.可以通过正则表达式来指定要处理的文件类型,等等
传递参数:
可以用require的方式:
require("url-loader?minetype=image/png!./file.png")
也可以在配置文件中添加
query
{ test: /\.png$/, loader: "url-loader", query: { mimetype: "image/png" } }
注意:最新版本的webpack,不让简写loader,所以必须加上“-loader”
使用babel-loader转换ES6
安装babel-loader和babel-corecnpm install babel-loader babel-core babel-preset-latest --save-dev
指定presets的方式(任选一):
1. 可以在webpack.config.js中配置
loaders: [ { test: /\.js$/, loader: 'babel', query: { presets: ['latest'] // 告诉babel如何去处理我们的ES6,以哪个版本的ES6规则来处理,这里的lastest是所有的版本 } } ]
可以在项目的根目录下建立babel的配置文件(.babelrc)
.babelrc
{ "presets": ["latest"] }
直接在package.json中配置
{ "name": "webpack-study", "version": "1.0.0", "description": "", "main": "index.js", "babel": { "presets": ["latest"] }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "webpack": "webpack --config webpack.config.js --progress --display-modules --colors --display-reasons" }, "author": "", "license": "ISC", "devDependencies": { "babel-core": "^6.24.0", "babel-loader": "^6.4.1", "babel-preset-latest": "^6.24.0", "css-loader": "^0.27.3", "html-webpack-plugin": "^2.28.0", "style-loader": "^0.15.0", "webpack": "^2.2.1" } }
在这里我们决定选第一种。
提高打包速度:
exclude: './node_modules/', // 不处理在这个文件夹里的ES6文件,即指定不打包的范围 include: path.resolve(__dirname, 'src/'), // 指定打包的范围,必须是绝对路径
使用css-loader处理css
安装css-loader和style-loadercnpm install css-loader style-loader --save-dev
自动添加前缀
cnpm install postcss-loader autoprefixer --save-dev
处理css中的@import
cnpm install postcss-import --save-dev
配置
{ test: /\.css$/, use: ['style-loader', 'css-loader?importLoaders=1', { loader: 'postcss-loader', options: { plugins: function () { return [ require('postcss-import'), // 处理css中的@import require('autoprefixer') // 自动添加浏览器前缀 ]; } } }] }
使用less-loader处理less
安装less和less-loadercnpm install less less-loader --save-dev
配置
{ test: /\.css$/, use: ['style-loader', 'css-loader?importLoaders=1', { loader: 'postcss-loader', options: { plugins: function () { return [ require('postcss-import'), // 处理css中的@import require('autoprefixer') // 自动添加浏览器前缀 ]; } } }, 'less-loader'] }
使用sass-loader处理scss
安装node-sass和sass-loadercnpm install node-sass sass-loader --save-dev
配置
{ test: /\.sass$/, use: ['style-loader', 'css-loader?importLoaders=1', { loader: 'postcss-loader', options: { plugins: function () { return [ require('postcss-import'), // 处理css中的@import require('autoprefixer') // 自动添加浏览器前缀 ]; } } }, 'sass-loader'] }
处理模板文件
安装html-loadercnpm install html-loader ejs-loader --save-dev
配置
{ test: /\.html$/, loader: "html-loader" }, { // test: /\.ejs$/, test: /\.tpl$/, loader: "ejs-loader" }
处理图片以及其他文件
安装file-loadercnpm install file-loader url-loader image-webpack-loader --save-dev
在模板中如何引用图片
<div class="layer"> <img src="${ require('../../assets/0.jpg') }" /> <div> this is a <%= name %> layer </div> <% for (var i = 0; i < arr.length; i++) { %> <%= arr[i] %> <% } %> </div>
使用file-loader
{ test: /\.(png|jpg|git|svg)$/i, loader: "file-loader", query: { name: 'assets/[name]-[hash:5].[ext]' } }
使用url-loader
{ test: /\.(png|jpg|git|svg)$/i, loader: "url-loader", query: { name: 'assets/[name]-[hash:5].[ext]', limit: 40000 // 40k ,当图片小于40k时,被打包成base64 } }
使用image-webpack-loader压缩图片
{ test: /\.(png|jpg|git|svg)$/i, loaders: [ "url-loader?limit=10000&name=assets/[name]-[hash:5].[ext]", "image-webpack-loader" // 压缩图片 ] }
相关文章推荐
- webpack基础配置入门
- webpack入门和实战(一):webpack配置及技巧
- webpack基础入门(四)
- webpack react基础配置二 热加载
- webpack 1 基础配置教程
- webpack入门的配置遇到的问题
- webpack react基础配置一
- webpack入门+react环境配置
- webpack入门+react环境配置
- webpack基础入门
- webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
- webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
- React +webpack 基础配置
- webpack入门+react环境配置
- js学习笔记:webpack基础入门(一)
- webpack基础入门(一)
- webpack基础入门
- webpack基础入门
- webpack 基础入门
- webpack基础入门