Webpack中文:
    Shimming 预置依赖 | webpack 中文文档

    假设我现在想要新建一个文件来更改body的样式,就像这样:

    1. export function ui(){
    2. $("body").css("background","red");
    3. }
    1. import _ from "lodash";
    2. import $ from "jquery";
    3. import { ui } from './jquery.ui'
    4. const dom = $("<div>");
    5. dom.html(_.join(["dell", "less", "Hello Word"], "~"));
    6. $("body").append(dom)
    7. ui();

    这个时候运行npm run build后查看index.html文件就会发现控制台打印了一个错误。
    image.png
    这是因为Webpack打包都是按模块执行的,模块里面的变量都只能在自己的文件中使用,通过这种方式可以让多个模块之前低耦合更方便维护。
    我们可以在jquery.ui.js文件中引入jquery来解决这个报错,但这不是最好的办法,假设jquery.ui.js文件是node_modules下的库代码该怎么办呢?

    Webpack提供了一个ProvidePlugin的插件可以自动帮我们引入代码库:

    1. // ...
    2. const webpack = require("webpack");
    3. module.exports = {
    4. // ...
    5. plugins: [
    6. new HtmlWebpackPlugin({
    7. template: "./src/index.html"
    8. }),
    9. new CleanWebpackPlugin({
    10. cleanOnceBeforeBuildPatterns: [
    11. path.resolve(__dirname, '../dist')
    12. ],
    13. }),
    14. // 在其他模块中发现使用了 $ 将自动引入 jquery,且赋值给 $
    15. new webpack.ProvidePlugin({
    16. $: "jquery"
    17. })
    18. ]
    19. }

    现在打包就能看到body标签的样式生效啦,另外ProvidePlugin还可以配置为数组:

    1. new webpack.ProvidePlugin({
    2. $: "jquery",
    3. // 当使用 _join 的时候就去执行 loadsh.join方法
    4. _join:["loadsh","join"]
    5. })