需要带有浏览器化和浏览器化轨道的链轮预处理文件
Requiring a sprockets-preprocessed file with Browserify and browserify-rails
我正在使用browserify-rails,我正在尝试让sprockets预处理包含sprockets指令的文件,以便当我使用browserify require()
它时,它将包含生成的JavaScript。
sprockets 指令试图包含 gem js-routes 的输出,以便允许我从客户端访问 Rails 路由。
这是我的设置(在app/assets/javascripts
内):
system/
rails_routes.js
application.js
application.js
是主文件,它运行应用程序的其余部分。我希望能够做类似的事情
var rr = require("./system/rails_routes.js");
在其中,并获取对路由对象的访问权限。
在system/react_routes.js
,我有以下内容:
//= require js-routes
console.log("Does this work?");
(顺便说一句,我配置js-routes
将输出放在一个名为 module.exports
的对象中,以便符合 CommonJS 模型,如 railsware/js-routes#121 中所述)
唯一的问题是,当我查看生成的捆绑包时,链轮指令仍然存在并且尚未扩展。
console.log
调用也在那里,并在我require()
模块时执行。
有没有办法让它工作?在将文件与浏览器化轨道捆绑之前让链轮预处理文件的正确方法是什么?
我花了无数的时间在我的项目中集成浏览器化轨道,并使 JS 路由在此设置中工作......
我得出并在下面描述的解决方案是我无法在 Browserify 进入之前让 Sprockets 预处理我的路由文件的结果。我在浏览器化轨道和链轮的源代码上都花了相当长的时间,但找不到一种方法来扭转局面,让每个组件以正确的顺序工作。
所以我的解决方案是使用 Rails 钩子在开发环境中"手动"生成完整的 JS 文件,以便路由始终与最新的 Rails 路由文件保持同步。然后,我假设路由JS文件在推送到生产环境时将是最新的。
在环境加载中这样做可确保在 Sprockets/browserify 插话之前 JS 文件已准备就绪:对他们来说,这只是另一个普通的 JS 文件。
以下是要包含在development.rb
中的代码:
ActionDispatch::Reloader.to_prepare do
Rails.application.reload_routes!
if JsRoutes.assert_usable_configuration!
JsRoutes.generate!(Rails.root.join('app/assets/javascripts/routes.js'))
end
end
您需要始终重新加载路由,否则生成的文件将始终表示 Rails 路由文件的倒数第二个状态。我一直想不通为什么...
在我的application.js
中,我只是删除了除 jQuery 之外的所有//=
指令(以保持全局 jQuery 可用),并对所有其他模块使用 require
方法,以便浏览器会选择我想要包含的文件。
所以这有点笨拙,但它确实有效。
我很想知道对 Sprockets 管道有更好了解的人是否可以提供更好的解决方案?
- 当我在浏览器中打开HTML文件时,javascript不起作用
- 链接/按钮从子文件夹下载文件--浏览器只是浏览
- 当读取文件时,浏览器打开良好,但它是空白浏览器
- JSON-从浏览器向外部服务器发送哪些http头JSON文件
- 在移动浏览器上显示大型文本文件
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 通过javascript跨浏览器访问outlook联系人文件夹
- 如何设置浏览器打开的文件对话框的文件名(一些默认值)
- 通过Android Chrome浏览器下载文件
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 临时解压缩文件以在浏览器中查看内容
- 在浏览器中打开文本文件-服务器上出现错误
- 浏览器缓存PHP生成的CSS和Javascript文件
- qoxdoo中的离线存储是否与所有浏览器和本地文件系统兼容
- 从服务器返回exe文件,并通过浏览器在客户端下载
- Web浏览器扩展名通用文件
- 浏览器.文件InvokeScript()don'我不在IE9工作
- 可以将信息传递到浏览器文件
- 用于选择和上传安卓 4.4.2 库存浏览器文件的网页
- 跨浏览器文件上传的Jquery插件