怎么在项目中引用 jQuery 这样的库呢?

    想一想,只要在 js 文件里,像 import React from 'react' 这样来处理应该就可以,我们来试一下。

    首先,安装 jquery。

    1. # 注意这里是 --save 而不是 --save-dev,因为要在线上环境上用 jquery
    2. $ npm install --save jquery

    接下来来使用 jquery。

    src/app.js

    1. import 'jquery';
    2. // 在 html 中应该有 id 为 "hello" 的元素吧,这点相信大家都懂的。
    3. // 这一行作用是把元素的内容改成 "change to other text"
    4. $("#hello").text('change to other text');

    遗憾地告诉你,报错了!

    16. 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包 - 图1

    虽然 import 了,但是编译的时候,找不到 $ 这个标识符。

    我们来改进一下:

    src/app.js

    1. import $ from 'jquery';
    2. $("#hello").text('change to other text');

    16. 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包 - 图2

    效果出来。

    没啥问题,但这不是我们这篇文章要讲的主要内容。

    我们考虑一种情况,跟上面的不太一样,你可能会使用各种 jquery 插件。

    我们来试试吧,通过实例来体验。

    我们来随便写一个简单的 jquery 插件。

    src/jquery.changeStyle.js

    1. $.fn.changeStyle = function(colorStr){
    2. this.css("color", colorStr);
    3. }

    这个插件很简单,只是改变元素的颜色。

    怎么来引用和使用呢?

    跟之前类似。

    src/app.js

    1. import $ from 'jquery';
    2. import './jquery.changeStyle';
    3. $("#hello").text('change to other text');
    4. // 把元素改成紫色
    5. $("#hello").changeStyle('pink');

    报错了,跟之前报的错一样。

    1. Uncaught ReferenceError: $ is not defined

    说是 $ 没定义,可是我们 import 了呀。

    那把 import './jquery.changeStyle'; 改成 import changeStyle from './jquery.changeStyle'; 试一下。

    还是没什么卵用。

    src/jquery.changeStyle.js 文件引用了 jquery 这个插件,可是外面 src/app.js 却不知道。

    我们来改一下 src/jquery.changeStyle.js 文件的内容。

    src/jquery.changeStyle.js

    1. import $ from 'jquery';
    2. $.fn.changeStyle = function(colorStr){
    3. this.css("color", colorStr);
    4. }

    16. 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包 - 图3

    效果出来了,这样是可以的。

    但是有一个问题啊,上面的 jquery 插件是我们自己随意写的,我们想怎么改都可以,如果是第三方的呢,就是说你有可能从网上下载一个别人写好的。

    这个时候,你总不能下载后,再来改吧。

    我们怎么做呢?

    这个时候要引入 webpack 的一个插件:ProvidePlugin

    这个插件可以有这样的效果。

    不必通过 import/require 使用模块

    把刚才的 src/jquery.changeStyle.js 还原一下。

    src/jquery.changeStyle.js

    1. $.fn.changeStyle = function(colorStr){
    2. this.css("color", colorStr);
    3. }

    接下来:

    webpack.config.js

    1. module.exports = {
    2. plugins: [
    3. new webpack.ProvidePlugin({
    4. $: 'jquery',
    5. jQuery: 'jquery'
    6. }),
    7. ...
    8. ]
    9. }

    什么意思呢?很容易理解,以后要遇到或处理 jQuery$ 都会去自动加载 jquery 这个库。

    现在我们运行一下 npm run dev,效果出来了。

    16. 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包 - 图4

    这个插件不止可以处理 jquery,还可以处理别的库,等你慢慢用它吧。

    就先到这。