cnpm i webpack -g
全局安装一下webpack;cnpm i webpack -D
安装到项目开发依赖即可; webpack ./src/main.js ./dist/bundle.js
1、在项目中,新建一个配置文件叫做webpack.config.js
2、在配置文件中,向外暴露一个配置对象,供webpack执行的时候来读取这个配置对象:
const path = require('path')
module.exports = {
entry: path.join(__dirname, './src/main.js'), // 指定要处理那个文件
output: { // 指定输出文件的存放路径
path: path.join(__dirname, './dist'), // 路径
filename: 'bundle.js' // 输出的文件名
}
}
1、每次修改完 项目代码,都需要手动运行一下 webpack 命令进行打包构建;比较麻烦
2、可以在项目本地安装一个webpack-dev-server
的工具来实现实时打包构建的效果;
3、注意:webpack-dev-server
这个工具,需要在项目本地安装,同时,它依赖于项目本地的webpack
:
cnpm i webpack webpack-dev-server -D
4、需要打开package.json
这个配置文件,找到 scripts
节点,在其中,新增一个dev
脚本命令:
"scripts": {
"dev": "webpack-dev-server"
},
5、只要在终端中,运行npm run dev
命令,去执行 dev
脚本,启动webpack-dev-server
这个实时构建编译的服务器;
6、注意:webpack-dev-server
打包出来的bundle.js
并没有存放到实际的物理磁盘,而是托管到了内存中!托管的路径是项目的根目录,所以,在引用的时候,script
标签的路径应该这样写:
<script src="/bundle.js"></script>
1、这个插件的作用:
2、如何配置插件:先运行cnpm i html-webpack-plugin -D
安装到本地开发依赖
3、在webpack.config.js
中,导入这个插件:
const htmlWebpackPlugin = require('html-webpack-plugin')
4、在webpack.config.js
的配置对象中,新增一个 plugins
插件节点:
plugins: [ // 插件的数组
new htmlWebpackPlugin({ // 创建一个把HTML首页托管到内存中的插件
template: path.join(__dirname, './src/index.html'), // 要把哪个HTML页面,作为模板,复制一份托管到内存中
filename: 'index.html' // 指定,将来在内存中复制出来的页面,名称叫做 index.html
})
]
方式1:
直接在 package.json
的dev
脚本后,添加相关指令即可:
"dev1": "webpack-dev-server --open --port 3000 --host 127.0.0.1 --hot"
方式2:(不推荐)
1、需要先在 webpack.config.js
中,添加devServer
选项:
devServer: { // webpack-dev-server运行时候的指令, 这种配置方式和 -- 指令,只能二选一
// --open --port 3000 --host 127.0.0.1 --hot
open: true, // 自动打开浏览器
port: 3000, // 指定端口号
host: '127.0.0.1', // 指定Ip地址
hot: true // 启用热更新, 这里的 hot 指令,需要配合 一个 热更新的 webpack 插件才能正常使用
}
2、需要在头部导入webpack
:
// 导入webpack
const webpack = require('webpack')
3、在plugins
节点中,添加一个新的插件:
new webpack.HotModuleReplacementPlugin()
1、运行cnpm i style-loader css-loader -D
来安装处理.css
文件的 第三方loader加载器
2、在webpack.config.js
的配置对象中,添加一个module
节点,并在 module 节点下,新增一个rules
数组,表示非JS文件的匹配规则:
module: { // 用来配置 非JS文件对应的loader的
rules: [ // 就是这些 非 JS 文件 和 loader 之间的对应关系
{ test: /\.css$/, use: ['style-loader', 'css-loader'] } // 创建处理 css 文件的 loader 匹配规则
]
}
1、运行cnpm i less-loader less -D
安装相关的loader
2、添加新的loader匹配规则:
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } // 配置处理less文件的规则
1、运行cnpm i sass-loader node-sass -D
2、添加loader配置规则:
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, // 配置 处理 scss 文件的规则
1、运行cnpm i url-loader file-loader -D
2、添加配置规则:
{ test: /\.jpg|png|gif|bmp$/, use: 'url-loader' } // 配置 处理 样式表中图片的 loader规则
3、如果,配置规则中,只需要调用一个loader,则,可以把数组简化成一个 字符串;
4、如果想要限制什么图片被转码,什么图片不被转码,这时候,可以为 url-loader 提供limit
配置参数;只有小于给定值的图片,才会被转码成base64;limit 的单位是Byte
字节
5、url-loader还有第二个配置参数,叫做name
1、安装两套babel
相关的包:
cnpm i babel-core babel-loader babel-plugin-transform-runtime -D
cnpm i babel-preset-env babel-preset-stage-0 -D
2、打开webpack.config.js
配置文件,添加babel
的loader
配置项:
// 添加转换JS文件的loader,
// 其中,必须把 node_modules 目录设置为 排除项,这样,在打包的时候,会忽略node_modules 目录下的所有JS文件;否则项目运行不起来!
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
3、在项目的根目录中,创建一个.babelrc
的配置文件,将来,babel-loader
在执行的时候,会读取并使用这个配置文件:
{
"plugins": ["transform-runtime"],
"presets": ["env", "stage-0"]
}