教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步 《webpack4 系列教程(十二):处理第三方 JavaScript 库》原文地址。或者来个人小站看更多内容: godbmw.com
本节课的代码目录以下:javascript
本节课的package.json
内容以下:html
{ "dependencies": { "jquery": "^3.3.1" }, "devDependencies": { "webpack": "^4.16.1" } }
JS
库?项目作大以后,开发者会更多专一在业务逻辑上,其余方面则尽力使用第三方JS
库来实现。java
因为js
变化实在太快,因此出现了多种引入和管理第三方库的方法,经常使用的有 3 中:jquery
<script></script>
标签引入便可js
文件:一些库因为历史缘由,没有提供es6
版本,须要手动下载,放入项目目录中,再手动引入。针对第一种和第二种方法,各有优劣,有兴趣能够看这篇:《CDN 使用心得:加速双刃剑》webpack
针对第三种方法,若是没有webpack
,则须要手动引入import
或者require
来加载文件;可是,webpack
提供了alias
的配置,配合webpack.ProvidePlugin
这款插件,能够跳过手动入,直接使用!git
如项目目录图片所展现的,咱们下载了jquery.min.js
,放到了项目中。同时,咱们也经过npm
安装了jquery
。es6
为了尽量模仿生产环境,app.js
中使用了$
来调用 jq,还使用了jQuery
来调用 jq。github
由于正式项目中,因为须要的依赖过多,挂载到window
对象的库,很容易发生命名冲突问题。此时,就须要重命名库。例如:$
就被换成了jQuery
。web
// app.js $("div").addClass("new"); jQuery("div").addClass("old"); // 运行webpack后 // 浏览器打开 index.html, 查看 div 标签的 class
webpack.ProvidePlugin
参数是键值对形式,键就是咱们项目中使用的变量名,值就是键所指向的库。npm
webpack.ProvidePlugin
会先从npm
安装的包中查找是否有符合的库。
若是webpack
配置了resolve.alias
选项(理解成“别名”),那么webpack.ProvidePlugin
就会顺着这条链一直找下去。
// webpack.config.js const path = require("path"); const webpack = require("webpack"); module.exports = { entry: { app: "./src/app.js" }, output: { publicPath: __dirname + "/dist/", path: path.resolve(__dirname, "dist"), filename: "[name].bundle.js", chunkFilename: "[name].chunk.js" }, resolve: { alias: { jQuery$: path.resolve(__dirname, "src/vendor/jquery.min.js") } }, plugins: [ new webpack.ProvidePlugin({ $: "jquery", // npm jQuery: "jQuery" // 本地Js文件 }) ] };
老规矩,根绝上面配置,先编写一下index.html
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div></div> <script src="./dist/app.bundle.js"></script> </body> </html>
命令行运行webpack
进行项目打包:
在 Chrome 中打开index.html
。以下图所示,<div>
标签已经被添加上了old
和new
两个样式类。证实在app.js
中使用的$
和jQuery
都成功指向了jquery
库。