Webpack 常用的loader
#
webpack 常用的包/模块 (loader)webpack
中的loader
一般都在module
部分中配置loader
顺序是从右往左,从下到上
示例:
module.export = { // 入口 entry: "./src/index.js", // 出口 ontput: path.resolve(__dirname, "dist"), // 输出的文件名 filename: "bundle.js", // 指定webpack 打包要使用的模块 module: { // 指定要加载的规则 rules: [ { // test 指定的时规则生效的文件 test: /\.ts$/, use: "ts-loader", // use 其他写法,里面可以写配置 options // use: [ // { loader: "style-loader" , // options:{ ... } // }, // ] // 要排除的文件 exclude: /node_modules/, } ] }}
#
必要的包webpack
webpack-cli
这俩个时webpack
必须要的包
#
常用的webpack
本地服务器#
webpack-dev-server
这个服务器是基于node
的,内部使用express
.
它是
wxpress
封装,启动并实时编译项目使用它来启动
webpack
服务,它会执行编译,编译的文件main.js
不会产生物理文件(默认在项目根目录中),会将编译存到内存条中一般使用它需要使用
html-webpack-plugin
插件配合开发安装
安装webpack-dev-server
,修改 package.json
中的 scripts
npm install --save-dev webpack-dev-server
"scripts":{ "start":"webpack serve --open chrome.exe"}
mac
中是:
"scripts":{ "start":"webpack serve --open 'google chrome'"}
- 配置
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = { mode: 'development', entry: { index: './src/index.js', print: './src/print.js', }, devtool: 'inline-source-map', devServer: { contentBase: './dist', // 为哪个文件夹提供本地服务功能 // prot:8080, // 端口号 inline:true, // 页面实时刷新 // historyApiFallback: // 在SPA页面中,依赖HTML5的history模式 }, plugins: [ ... ], output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist'), clean: true, publicPath: '/', // 注意公共地址 }, };
es6
转 es5
文件#
解析 - 安装
webpack 3.x | babel-loader 8.x | babel 7.x
npm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env webpack
- 配置
module: { rules: [ { test: /\.js$/, // 排除 exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { // presets: ['@babel/preset-env'] presets: ['es2015'] } } } ]}
TypeScript
文件#
解析 typescript
\ ts-loader
打包 typescript
(.ts
)文件时使用
- 安装
npm install --save-dev ts-loader
- 配置
webpack.config.js
module.export = { ··· module: { // 指定要加载的规则 rules: [ { // test 指定的时规则生效的文件 test: /\.ts$/, use: "ts-loader", // 要排除的文件 exclude: /node_modules/, } ] }}
#
解析 CSS 文件style-loader
/ css-loader
- 安装
npm install --save-dev css-loadernpm install style-loader --save-dev
- 配置
webpack.config.js
module.exports = { module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ]//顺序是从右往左,从下到上 } ] }}
css-loader
:加入 a.css
中引入了 b.css
和 c.css
,css-loader
会将其合并成一个css
文件
style-loader
:将合并后的 css
文件挂载到 head
标签内
#
解析 less 文件less-loader
/ less
- 安装
npm install --save-dev less-loader less
- 配置
webpack.config.js
module.exports = { ... module: { rules: [{ test: /\.less$/, use: [{ loader: "style-loader" // creates style nodes from JS strings }, { loader: "css-loader" // translates CSS into CommonJS }, { loader: "less-loader" // compiles Less to CSS }] }] }};
#
解析 sass 文件sass-loader
node-sass
webpack
- 安装
npm install sass-loader node-sass webpack --save-dev
- 配置
webpack.config.js
module.exports = { ... module: { rules: [{ test: /\.scss$/, use: [{ loader: "style-loader" // 将 JS 字符串生成为 style 节点 }, { loader: "css-loader" // 将 CSS 转化成 CommonJS 模块 }, { loader: "sass-loader" // 将 Sass 编译成 CSS }] }] }};
如果使用 scss
、less
、stylus
等 css
预处理器。例如,我们要使用 sass
预处理器,首先要安装 sass-loader
和 node-sass
。
#
解析图片文件 url-loader
/ file-loader
- 安装
url-loader
npm install --save-dev url-loader
- 配置
webpack.config.js
url-loader
功能类似于 file-loader
,但是在文件大小(单位byte
)低于指定的限制时,可以返回一个 Data URL
(base64
)。图片大于规定的大小,要用file-loader
module.exports = { module: { rules: [ { test: /\.(png|jpg|gif|jpeg)$/, use: [ { loader: 'url-loader', options: { // 图片小于limit 的值会转换为 base64 字符串形式,图片大于规定的大小,要用file-loader limit: 8192 } } ] } ] }}
- 安装
file-loader
npm install --save-dev file-loader
- 配置
webpack.config.js
module.exports = { output:{ path:path.resolve(__dirname,"dist"), filename:"bundle.js", // 设置 file-loader 时有时需要设置 publicPath publicPath:"dist/", // 设置公共 url }, module: { rules: [ { test: /\.(png|jpg|gif|jpeg)$/, use: [ { loader: 'file-loader', options: { // img文件夹 name:'img/[name].[hash:8].[ext]', } } ] } ] }}
img
: 文件要打包到的文件夹[name]
: 获取图片原来的名字,放在打包后的文件中hash:8
: 8位哈希值,防止重名ext
: 使用图片原来的扩展名
file-loader
的增强版,除了上述功能,还可以将文件转换为 base64 URI
#
解析 vue 文件- 项目中安装
npm i vue-loader vue-template-compiler --save-dev
- 配置
module.exports = { module: { rules: [ { test: /\.vue$/, use: [ { // 高版本需要一个插件 否则报错 loader: 'vue-loader', } ] } ] }, resolve:{ // 如果想导入时想省略扩展名用以下配置 extensions:['.js', '.jsx','.css','.vue'], // alias 别 名 alias:{ 'vue$':'vue/dist/vue.ue.esm.js', // 'vue$':'vue/dist/vue.ue.runtime.js', } }}
postcss-loader
#
通过 postcss-loader
来给新属性添加厂商前缀。