在不重新启动服务器的情况下,Webpack bundle.js 更改不会显示在 Spring 应用程序中?

Posted

技术标签:

【中文标题】在不重新启动服务器的情况下,Webpack bundle.js 更改不会显示在 Spring 应用程序中?【英文标题】:Webpack bundle.js changes not showing in a Spring application without restarting the server? 【发布时间】:2019-09-01 21:54:33 【问题描述】:

我按照本教程创建了一个 Spring-boot+ ReactJs 应用程序:https://spring.io/guides/tutorials/react-and-spring-data-rest/

应用程序以./mvnw spring-boot: run 启动,我有一个运行以下配置的 NPM 脚本"watch": "webpack --watch -d"

var path = require('path');

module.exports = 
    entry: './src/main/js/app.js',
    devtool: 'sourcemaps',
    cache: true,
    mode: 'development',
    output: 
        path: __dirname,
        filename: './src/main/resources/static/built/bundle.js'
    ,
    module: 
        rules: [
            
                test: path.join(__dirname, '.'),
                exclude: /(node_modules)/,
                use: [
                    loader: 'babel-loader',
                    options: 
                        presets: ["@babel/preset-env", "@babel/preset-react"]
                    
                ]
            
        ]
    
;

app.js 按预期编译成bundle.js,但如果我在刷新页面时不使用./mvnw spring-boot:run 重新启动服务器,我将看不到更改。

我可能遗漏了一些东西,也许 spring-boot 没有使用我的 bundle.js 文件而是某种副本?

【问题讨论】:

【参考方案1】:

我可以猜测嵌入式 tomcat 不会热重载静态文件。你可以试试这些Refreshing static content with Spring MVC and Boot

但也将分享我的解决方案,即使用 webpack-dev-server 进行热重载和一般的 Web 开发。

const path = require('path');
...
devServer: 
    contentBase: path.join(__dirname, 'src'),
    publicPath: '/build',
    port: 8000,
    proxy: 
        "**": "http://localhost:8080"
    
,

然后运行webpack-dev-server 命令来运行它。它会即时编译您的应用程序,您的更改会立即反映出来,一定要试一试。

【讨论】:

我尝试使用webpack-dev-server,它可以编译,但仍然没有反映更改。我还尝试了 spring 的热重载,它需要一个名为 spring-boot-devtools 的额外依赖项,据说它应该完全符合我的要求,但它仍然无法正常工作。如果我找到可行的解决方案,我会通知您。还是谢谢【参考方案2】:

我今天遇到了同样的问题并解决了。

关键是同时运行npm run watchmvn spring-boot:run

确保你有

    "scripts": 
        "watch": "webpack --watch -d --output .//classes/static/built/bundle.js"
    

在您的package.json

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <optional>true</optional>
    </dependency>   

在你的pom.xml

【讨论】:

以上是关于在不重新启动服务器的情况下,Webpack bundle.js 更改不会显示在 Spring 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不重新启动 JSF 中的服务器的情况下更新应用程序?

如何在不重新启动服务器的情况下克服 Permgen 空间异常..,任何人都可以帮助我

有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?

是否可以在不重新启动服务器的情况下在远程 weblogic 上重新部署应用程序?

nginx - 我可以在不重新启动服务器的情况下添加新的虚拟主机吗?

在不重新启动应用程序的情况下设置 Heroku 环境变量