【问题标题】:Configuring Webpack for Manually Added Files为手动添加的文件配置 Webpack
【发布时间】:2018-05-30 03:52:25
【问题描述】:

关于jquery和webpack的简单问题,

我已经下载jquery.js然后添加到app.js这些行

import "./jquery";
import "./bootstrap";

我的webpack.config 输入行

entry: "./src/app.js"

所以文件树是:

./webpack.config.js
./src/app.js
./src/jquery.js
./src/bootstrap.js

我怎样才能简单地添加jquery 以在webpack.config 中使用此文件树进行定义?

我尝试添加

new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery'
        })

在webpack.config 的末尾,但它给出了Module not found: Error: Can't resolve 'jquery'。

用webpack手动使用js文件打包不报错的解决方法是什么?

【问题讨论】:

  • 您是否使用 npm 或 yarn 添加了 jquery 包?如果您使用的是 npm 包,则不必手动下载它,它应该允许您将它与 webpack 一起使用
  • @TFischer 我下载了js文件放在app.js旁边

标签: javascript jquery twitter-bootstrap npm webpack


【解决方案1】:

第 1 步:

一般来说,Webpack 是一个模块打包器。

它允许捆绑您自己的模块 (require("./my-module.js")) 以及第三方模块 (require("bootstrap"))

在您的情况下,这意味着您不必自己下载 jquery 和引导文件。更新您的 package.json 以包含所需的 jquery 和引导模块。 NPM 将负责获取它们,而 webpack 将从 node_modules 文件中进行捆绑。

第 2 步:

一般来说,webpack 需要entry 点和output 位置。这就是它需要的最小配置。

一旦你有了entry 点,webpack 仍然需要知道你的代码需要哪些依赖项。无论是您自己的模块还是第三方模块(使用 npm 维护)。这就是require("module-name-or-path") 或import "module-name-or-path" 出现的地方。这意味着您需要确保您的 entry 脚本具有在同一文件或依赖模块中提到的所有必需依赖项。

为了更深入地了解,webpack 查看entry 点并将构建依赖关系图。它将读取所有require() 或import 并引入所有必需的模块。然后捆绑它。

在您的情况下,入口脚本可以包含 jquery 和引导 npm 模块(即第三方)的 require 语句

如果您仍然需要清晰,请随时查看代码here。特别看看src/entry.js

注意:Bootstrap 也需要字体和图像。上面存储库中的代码也处理了它们。 webpack 完成的所有魔法!

【讨论】:

  • 感谢您提供信息丰富的详细回答。不过我认为webpack 也可以处理手动下载的 js 文件。把我的jquery.js 作为我自己写的different js 文件,我需要bundle it 而bundle js 可以理解$ 和jquery 术语。必须有解决方案。
  • @hello_stack 有!您可以使用 require("script-loader!./jquery.js") 。您可以获得有关脚本加载器的更多信息:webpack.js.org/loaders/script-loader。但是,我强烈建议您使用 npm 下载的模块文件。否则,您将不得不自己处理所有必需的文件。举个例子:webpack 需要字体和图像文件。你需要确保你也下载了它们并且 webpack 能够在捆绑你下载的引导代码时使用它们。您直接使用第三方模块源文件的次数越少越好。让 webpack 照顾好自己。
  • Script-loader 是解决这个问题的好方法。但我不明白一些事情。如果我写了另一个 js 文件,我可以将它导入 app.js 并且它可以正常工作。现在为什么我们不能在没有任何问题且没有任何额外加载器的情况下导入 jqeury 呢?谢谢
  • 那是因为ProvidePlugin 只接受一个模块名称(作为字符串)并在内部尝试使用require() 加载相同的名称。为了让您在代码中使用 jquery,它需要公开为全局。显然ProvidePlugin 不会帮助您处理 下载 代码。您有两个选择: 1. 将 jquery 自己公开为全局变量 2. 如前所述,使用 jquery 作为模块。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 2020-09-25
相关资源
最近更新 更多