Webpack x Symfony 5 - 未定义 JQuery

Posted

技术标签:

【中文标题】Webpack x Symfony 5 - 未定义 JQuery【英文标题】:Webpack x Symfony 5 - JQuery is not defined 【发布时间】:2021-03-01 06:07:42 【问题描述】:

今晚我决定开始学习使用 Webpack 和 Encore。

刚开始,我已经遇到了一个问题:我的模板中不存在 Jquery,但我的控制台中存在。

我是怎么到这里的:

首先我下载了​​依赖:composer require symfony/webpack-encore-bundle; yarn install; yarn add jquery --dev 然后,我构建了我的资产:yarn encore dev --watch 我更新了 assets/app.js 文件,所以它(应该?) 导入 Jquery:... import $ from 'jquery'; ... 最后,我在我的 templates/base.html.twig 文件中编写了代码:
         encore_entry_script_tags('app') 
        <script type="text/javascript">

            $(document).ready(function()
                console.log('ok');
            )
        </script>
       % block javascripts %% endblock %

我在Symfony documentation之后做了所有这些。

我尝试了什么:

我尝试使用import $ from 'jquery' 行,使用constrequire 等等... 我尝试使用&lt;script src="asset('build/app.js')"&gt;&lt;/script&gt;而不是 encore_entry_script_tags('app') 。 我尝试将资产构建为 prod env 而不是 dev。

【问题讨论】:

***.com/questions/2194992/jquery-is-not-defined***.com/questions/8373357/jquery-is-not-defined-error***.com/questions/8886614/… 不,这不起作用。 【参考方案1】:

我通过在 assets/app.js 文件中添加 const $ = require('jquery'); global.$ = global.jQuery = $; 来修复它。

【讨论】:

请不要通过编辑/更新问题来回答 - 在答案空间中发布完整的答案,因为我已经编辑了你的。【参考方案2】:

当您使用 Webpack Encore 时,您不需要通过 Js 文件手动定义 jQuery。您只需将以下内容添加到您的 webpack.config.js 文件中,即可将其包含在您的 WebpackConfig 中:

Encore
  // your Encore config (outputPath, publicPath, ...)
  .autoProvidejQuery()

相当于:

WebpackConfig.autoProvideVariables(
    $: 'jquery',
    jQuery: 'jquery'
);

或者当使用没有 Encore 的 Webpack 时:

var webpack = require('webpack')

module.exports = 
  plugins: [
    new webpack.ProvidePlugin(
      $: 'jquery',
      jQuery: 'jquery'
    )
  ],

在更改 webpack.config.js 文件时,请确保停止并重新启动 Webpack / Encore。

【讨论】:

以上是关于Webpack x Symfony 5 - 未定义 JQuery的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4 + Webpack encore - 未定义 Vue

Symfony 5 + Webpack Encore + Datatables:未显示按钮

webpack:无法读取未定义的属性“匹配”

Symfony 5 Phpunit 未定义方法

未找到 Webpack 包存储库

Webpack 5 - 未捕获的 ReferenceError:未定义进程