首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Symfony项目中设置webpack的现场重装?

如何在Symfony项目中设置webpack的现场重装?
EN

Stack Overflow用户
提问于 2022-03-05 17:26:12
回答 1查看 1.8K关注 0票数 0

我已经用给定的命令symfony new app --webapp创建了一个Symfony完整的web应用程序。它附带了配置为Webpackwebpack-encore。我可以用npm run watch编译我的资产。但是浏览器不会在我的I进行更改时自动重新加载。我尝试过使用webpack开发服务器来跟踪Symfony的官方文档这里,但是没有起作用。

webpack.config.js (我刚刚删除了注释):

代码语言:javascript
复制
const Encore = require('@symfony/webpack-encore');
 if (!Encore.isRuntimeEnvironmentConfigured()) {
        Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
    }
Encore
    .setOutputPath('public/build/')
    .setPublicPath('/build')
    .addEntry('app', './assets/app.js')
    .enableStimulusBridge('./assets/controllers.json')
    .splitEntryChunks()
    .enableSingleRuntimeChunk()
    .cleanupOutputBeforeBuild()
    .enableBuildNotifications()
    .enableSourceMaps(!Encore.isProduction())
    .enableVersioning(Encore.isProduction())
    .configureBabel((config) => {
       config.plugins.push('@babel/plugin-proposal-class-properties');
     })
    .configureBabelPresetEnv((config) => {
        config.useBuiltIns = 'usage';
        config.corejs = 3;
    })
    ;
module.exports = Encore.getWebpackConfig();

package.json:

代码语言:javascript
复制
{
    "devDependencies": {
        "@hotwired/stimulus": "^3.0.0",
        "@symfony/stimulus-bridge": "^3.0.0",
        "@symfony/webpack-encore": "^1.7.0",
        "core-js": "^3.0.0",
        "regenerator-runtime": "^0.13.2",
        "webpack-notifier": "^1.6.0"
    },
    "license": "UNLICENSED",
    "private": true,
    "scripts": {
        "dev-server": "encore dev-server",
        "dev": "encore dev",
        "watch": "encore dev --watch",
        "build": "encore production --progress"
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-06 01:10:12

您可以在Symfony项目中使用webpack-encoreBrowsersync的帮助下设置实时重新加载。仔细遵循下面的步骤,你就会走得很好。

  1. 第一步:
代码语言:javascript
复制
npm i browser-sync-webpack-plugin browser-sync dotenv --save-dev
  1. 编辑webpack.config.js (对于要添加的行有注释):
代码语言:javascript
复制
const Encore = require('@symfony/webpack-encore');
require("dotenv").config(); // line to add
const BrowserSyncPlugin = require("browser-sync-webpack-plugin"); // line to add
if (!Encore.isRuntimeEnvironmentConfigured()) {
    Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
}
Encore
    .setOutputPath('public/build/')
    .setPublicPath('/build')
    .addEntry('app', './assets/app.js')
    .enableStimulusBridge('./assets/controllers.json')
    .splitEntryChunks()
    .enableSingleRuntimeChunk()
    .cleanupOutputBeforeBuild()
    .enableBuildNotifications()
    .enableSourceMaps(!Encore.isProduction())
    .enableVersioning(Encore.isProduction())
    .configureBabel((config) => {
        config.plugins.push('@babel/plugin-proposal-class-properties');
    })
    .configureBabelPresetEnv((config) => {
        config.useBuiltIns = 'usage';
        config.corejs = 3;
    })

    // entry to add 
    .addPlugin(new BrowserSyncPlugin(
        {
            host: "localhost",
            port: 3000,
            proxy: process.env.PROXY,
            files: [
                {
                    match: ["src/*.php"],
                },
                {
                    match: ["templates/*.twig"],
                },
                {
                    match: ["assets/*.js"],
                },
                {
                    match: ["assets/*.css"],
                },
            ],
            notify: false,
        },

        {

            reload: true,
        }
    ))

;

module.exports = Encore.getWebpackConfig();
  1. 将下面的行添加到您的.env中(当您生成symfony serve时,url应该是您得到的):
代码语言:javascript
复制
# the url should be the one you get when you make symfony serve
PROXY=http://127.0.0.1:8000/
  1. 在项目文件夹中打开终端并键入:
代码语言:javascript
复制
symfony serve
  1. 在项目文件夹中打开第二个终端并键入:
代码语言:javascript
复制
npm run watch
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71364357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档