如何在不重新启动服务器的情况下更改Javascript?

时间:2016-08-06 07:57:40

标签: javascript phoenix-framework brunch

我似乎无法在不重新启动服务器的情况下更改任何JavaScript文件 - 它真的杀死了很多在凤凰城工作的实时重装乐趣。我没有做大量的JavaScript,所以我不确定我是否做错了。

凤凰版:1.2.0

重现的步骤:

  1. 使用mix phoenix.new foo
  2. 创建新项目
  3. 创建web/static/js/foo.js文件。
  4. 在该文件中,写下alert("Hello, world!");
  5. app.js中,在底部加import "web/static/js/foo"
  6. 使用mix phoenix.server启动Phoenix并导航至localhost:4000
  7. 刷新页面的次数没关系,你会看到一个带有“Hello world!”的警告框。每一次都没有失败。
  8. foo.js消息编辑​​为“Hello worlds!”
  9. 我希望我仍然会收到包含更新文本的提示消息,但警报框会一直停止显示。它们只在我重新启动服务器时才开始出现。
  10. 这是预期的行为吗?凤凰城的一个错误?我是否以Brunch不期望的方式编写我的JS代码?这是一个巴别塔问题吗?我应该以不同的方式组织我的代码吗?

    应该补充说我正在Linux上开发Chrome - 以防这可能是浏览器问题

    编辑:我再也无法重现这个问题,但我的非玩具项目仍然存在问题:

    我的原始问题出现在我正在开发的应用中 - 我在global.jQuery = require("jquery")中有global.bootstrap = require("bootstrap")app.js。如果我评论这两行,保存并取消注释,我在浏览器中出现Javascript错误:app.js:16Uncaught Error: Cannot find module 'jquery' from 'web/static/js/app.js'

2 个答案:

答案 0 :(得分:4)

  • 这是预期的行为吗?是。
  • 凤凰城的一个错误?否。
  • 我是否以Brunch不期望的方式编写我的JS代码?你是对的。
  • 这是一个巴别塔问题吗?不。
  • 我应该以不同的方式组织我的代码吗?可能。

Brunch(或Node.js或任何其他模块捆绑器)期望import语句中的相对路径:它无法从web/static/js/foo解析web/static/js/app.js并且未标记foo.js作为app.js(入口点)的依赖关系。这就是为什么在更改app.js时不会重建foo.js的原因。当Brunch重新启动时,它会完全重建app.js,其中包含最新的foo.js(Brunch包含它,因为配置中的joinTo.javascripts版本)来自磁盘。

指定相对路径(import "./foo"),更喜欢import jquery from ...而不是global.jquery = ...

答案 1 :(得分:0)

在客户端(浏览器)中禁用缓存(如果已启用)。 禁用服务器中的缓存(如果已启用)。