我似乎无法在不重新启动服务器的情况下更改任何JavaScript文件 - 它真的杀死了很多在凤凰城工作的实时重装乐趣。我没有做大量的JavaScript,所以我不确定我是否做错了。
凤凰版:1.2.0
重现的步骤:
mix phoenix.new foo
web/static/js/foo.js
文件。alert("Hello, world!");
app.js
中,在底部加import "web/static/js/foo"
。mix phoenix.server
启动Phoenix并导航至localhost:4000
。foo.js
消息编辑为“Hello worlds!”这是预期的行为吗?凤凰城的一个错误?我是否以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'
答案 0 :(得分:4)
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)
在客户端(浏览器)中禁用缓存(如果已启用)。 禁用服务器中的缓存(如果已启用)。