Webpack 中文指南 (写的简洁清晰,更容易里面模块化与webpack 基本知识)
Webpack 入坑之旅系列 (一步一步和vue结合,还行)
Webpack 官方文档 (权威)
【摘自Webpack
中文指南】Webpack
是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader
的转换,任何形式的资源都可以视作模块,比如 CommonJs
模块、 AMD
模块、 ES6
模块、CSS
、图片、 JSON
、Coffeescript
、 LESS
等。
其实我也喜欢这个图 : 【来自webpack官网】
webpack
基本结构配置使用的 CommonJS 规范 进行配置,其实就是使用module.exports
对外提供一个json
配置,这个配置包括 :
示例: webpack.config.js
var webpack = require('webpack');//加载webpack模块
module.exports = {
entry: './entry.js',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
loaders: [
{test: /\.css$/, loader: 'style-loader!css-loader'},
{test: /\.(png|jpg)$/, loader: "url-loader?limit=8192&name=./img/coffe.png"}, //限定文件大小,base64转换
// {test: /\.(png|jpg)$/, loader: "url-loader?limit=8192&name=./[name].[ext]"}, 指定文件生成路径
]
},
plugins: [
new webpack.BannerPlugin('this file is create!')
]
}
推荐 webpack 2.0
: https://webpack.js.org/concepts/
页面入口文件 ,可以配置一个也可配置多个:
规则 1: entry: string|Array
const config = {
entry: './path/to/my/entry/file.js'
};
module.exports = config;
相当于 :
const config = {
entry: {
main: './path/to/my/entry/file.js'
}
};
规则 2 : entry: {[entryChunkName: string]: string|Array}
const config = {
entry: {
app: './src/app.js',
vendors: './src/vendors.js'
}
};
多应用配置 多个入口文件:
const config = {
entry: {
pageOne: './src/pageOne/index.js',
pageTwo: './src/pageTwo/index.js',
pageThree: './src/pageThree/index.js'
}
};
文件输出项配置 ,入口文件最终要生成什么文件,放在什么路径;
示例1:
output: {
path: __dirname, //__dirname node内置函数,只所在的当前命令
filename: 'bundle.js'//只能是文件名,不能有路径存在
}
示例 2
{
entry: {
app: './src/app.js',
search: './src/search.js'
},
output: {
filename: '[name].js', //name 指的是 entry的key值 :app.js
path: __dirname + '/build'
}
}
更多 高级内容,待研究!
【摘】Loader 可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为参数,返回转换的结果。这样,我们就可以通过 require 来加载任何类型的模块或文件,比如 CoffeeScript、 JSX、 LESS 或图片。
官网提供的Loader清单 ,使用时查看即可!
loader 在使用的时候,必须先安装配置!
//安装 css相关loader
npm install css-loader style-loader
特性 :
示例:
module.exports = {
entry: './entry.js',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
loaders: [
{test: /\.css$/, loader: 'style-loader!css-loader'}//css loader
]
}
}
module.rules 可以在 webpack 配置中指定多个loader ,这是一个简单的方式来显示加载器:
```
module: {
rules: [
{
test: /\.css$/,
use: [
{ loader: 'style-loader'},
{
loader: 'css-loader',
options: {
modules: true
}
}
]
}
]
}
插件可以完成更多 loader 不能完成的功能 , 除了webpack 内置插件外,npm 也可以安装第三方插件。
查看官方插件清单
插件简单配置 :
module.exports = {
entry: './entry.js',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
loaders: [
{test: /\.css$/, loader: 'style-loader!css-loader'}
]
},
plugins: [
new webpack.BannerPlugin('this is file header!')
]
}
可以配置模块路径(绝对路径),拓展名,别名配置 ,为了方便引用;
resolve: {
extensions: ['', '.js', '.vue', '.json', '.css']
}
可以指定运行环境,比如 : 使用node webpack将编译的为类似node.js的环境中使用;
查看支持的目标
module.exports = {
target: 'node'
};
指定多个目标 :
var path = require('path');
var serverConfig = {
target: 'node',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'lib.node.js'
}
//…
};
var clientConfig = {
target: 'web', // <=== can be omitted as default is 'web'
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'lib.js'
}
//…
};
module.exports = [ serverConfig, clientConfig ];
查看更多 target 的内容
开发时,并不想每次修改某一模块就执行命令进行重新编译构建,所以可以通过下面方式进行热更新:
方式 1 : webpack
命令
// 显示编译进度, 颜色 , 启动监听模式
webpack --progress --colors --watch
开启监听模式后,没有变化的模块会在编译后缓存到内存中,而不会每次重新编译,当有文件变化时,只会编译变化的文件。
方式 2 : 使用 webpack-dev-server
开发工具
安装 :
npm install webpack-dev-server -g //全局安装
npm install webpack-dev-server --save-dev //配置到package.json
运行 :
webpack-dev-server --progress --colors
使用时,它将启动一个express
静态资源服务器,并监听和自动运行webpack
,访问地址 : localhsot:8080
或 localhost:8080/webpack-dev-server/
; 基本原理是 它启动一个socket.io 服务实时监听变化并自动刷新页面。
# 基本步骤:
##1.初始化package.json
* npm init -y
##2.安装webpack依赖
* npm install webpack --save-dev
* npm info webpack : 查看webpack 信息
* npm install webpack@1.12.x --save-dev : 安装指定版本的webpack
##3.安装webpack开发工具
* npm install webpack-dev-server --save-dev
* npm install webpack-dev-server -g
##4.安装css loader
* npm install css-loader style-loader
##5.编译显示进度和颜色
* webpack --progress --colors
* webpack --progress --colors --watch
##6.快速编译,热更新
* webpack --progress --colors --watch
* webpack-dev-server --progress --colors :使用开发包
##7.安装加载url-loader
* npm install url-loader --save-dev
##8.缩写
* --save-dev : 保存到 package.json 的 devDependencies 依赖中 缩写:-D
* --save : 保存到 package.json 的 dependencies 依赖中 缩写 : -S
##9.安装vue
* npm install vue -D
* commonJS 引入 require('vue/dist/vue.js')
* Babel 引入 import Vue from 'vue/dist/vue.js';