首页 > 解决方案 > Javascript文件在symfony twig中不起作用

问题描述

在我的 symfony 项目中,我的 css 链接良好,但我的 javascript 无法正常工作,我找不到原因。我想我错过了一些愚蠢的事情......!自从我运行 Sass 以来,我一开始就尝试使用 encore webpack,但我放弃并切换到 classi src=""

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}Welcome!{% endblock %}</title>
        {# Run `composer require symfony/webpack-encore-bundle`
           and uncomment the following Encore helpers to start using Symfony UX #}
        {% block stylesheets %}
{#            {{ encore_entry_link_tags('app') }}#}
{#            {{ encore_entry_script_tags('app') }}#}
           <link rel="stylesheet" href="{{ asset('bundles/mercuryseriesflashy/css/flashy.css') }}">
            <link rel="stylesheet" href="{{ asset('./build/app.css') }}">
        {% endblock %}

        {% block javascripts %}
{#            {{ encore_entry_script_tags('app') }}#}
            <!-- Flashy depends on jQuery -->



        {% endblock %}
    </head>
    <body>
    {% block navbar %} {% include 'inc/navbar.html.twig'%}{% endblock %}
        {% block body %}{% endblock %}
        {% block footer %}{% endblock %}
    <script src="{{ asset('./build/app.js') }}"></script>

    <script src="//code.jquery.com/jquery.js"></script>

    </body>
</html>

/*
 * Welcome to your app's main JavaScript file!
 *
 * We recommend including the built version of this JavaScript file
 * (and its CSS file) in your base layout (base.html.twig).
 */

// any CSS you import will output into a single css file (app.scss in this case)
import './styles/app.scss';

import './bootstrap';
// start the Stimulus application

const logoMenu = document.querySelector('.logoMenuImg');
const contItems = document.querySelector('.contItems');
const arrItems = document.querySelectorAll('.items');

console.log(logoMenu);
console.log(contItems);
console.log(arrItems);

console.log('arrItems');

alert('hello world');

谢谢您的帮助

ps:在inspector中它是空白的,没有错误

标签: javascriptphphtmlsymfonytwig

解决方案


如果你使用encore_entry_script_tags我假设你已经在你的 webpack 配置中添加了你的 JS 文件?我看到您正在使用资产,如果您在 Symfony 4.4 及更高版本中,请删除它,它已被弃用。使用 Webpack 安可。

let Encore = require('@symfony/webpack-encore');
let CopyWebpackPlugin = require('copy-webpack-plugin');
//let TerserPlugin = require('terser-webpack-plugin');

Encore
  // directory where compiled assets will be stored
  .setOutputPath('public/build/')
  // public path used by the web server to access the output path
  .setPublicPath('/build')

  .cleanupOutputBeforeBuild()
  .enableSourceMaps(!Encore.isProduction())
  .addEntry('app', './assets/js/app.js')
  .enableSingleRuntimeChunk()
;
module.exports = Encore.getWebpackConfig();

并运行npm run buildyarn encore <env> 查看文档:https ://symfony.com/doc/current/frontend.html


推荐阅读