Dojo 如何防止流星观看文件?
我想和你一起使用Dojo 如何防止流星观看文件?,dojo,meteor,Dojo,Meteor,我想和你一起使用 我首先在/public 然后,我将其包括在客户端,包括: <script src="/dojo/dojo.js" data-dojo-config="async: true"></script>` 这对于Meteor内置的大规模应用程序来说是一个大问题。我在Meteor和Matt谈过,他说他们的团队正在为他们即将发布的一个版本研究解决这个问题的方法。因此,登上他们的时事通讯,当它可用时,你会得到通知 马修,你的评论: 我终于找到了解决办法。我把所有东西
/public
<script src="/dojo/dojo.js" data-dojo-config="async: true"></script>`
这对于Meteor内置的大规模应用程序来说是一个大问题。我在Meteor和Matt谈过,他说他们的团队正在为他们即将发布的一个版本研究解决这个问题的方法。因此,登上他们的时事通讯,当它可用时,你会得到通知 马修,你的评论:
我终于找到了解决办法。我把所有东西都放在/public/lib/中。然后,在/usr/lib/meteor/app/run.js的第286行,我添加了我不想让meteor观看的文件夹:self.exclude_path=[path.join(app_dir,.meteor,'local')、path.join(app_dir,'public,'lib');这样,我就可以在lib中拥有我想要的任意多的文件,而且它们不会降低所有速度。包含路径为“/lib/dojo/dojo.js” 就目前而言,这是一个很好的解决方案,以下是与此相关的其他问题,也将在即将发布的版本中介绍:
- 有些包有重叠的依赖项,但不像PHP的require_once()那样排除它们
- 本机require/define动态脚本加载器,因此并非所有文件都加载在条目1上,该条目可以计算依赖顺序,而无需转到levels、lib或main*
- 创建包并将其部署到存储库的正式方式。目前正在使用(捷运)和
- 创建文件夹
,并将所有静态资产移到其中。meteor未监视此文件夹public/#static/
- 在URL前面加上static(
)/img/cat.png->/static/img/cat.png
- 安装mime npm包
cd ~/.meteor/tools/latest/lib/node_modules/ npm install mime
- 创建一个rawConnectionHandler为资产提供服务(贷记到:)
服务器/静态\u文件\u处理程序.coffee
fs = Npm.require('fs') mime = Npm.require('mime') WebApp.rawConnectHandlers.use (req, res, next) -> re = /^\/static\/(.*)$/.exec(req.url) if re isnt null # Only handle URLs that start with /static/* filePath = process.env.PWD + "/public/.#static/" + re[1] type = mime.lookup(filePath) data = fs.readFileSync(filePath, data) res.writeHead 200, "Content-Type": type res.write data res.end() else # Other urls will have default behaviors next() return
- 不适合为具有查询参数的资产提供服务。regex还将匹配/static/html/image.html?src=/static/img/cat.png,试图为文件名包含参数的文件提供服务。这很容易改变
- Meteor完全不知道这些文件,因此它们不会包含在appcache清单中。如果要使它们脱机可用,请查看我添加到的addpath选项
- 意识到这是重复的:
见:
这对我来说是个大问题。我必须提供大约12000张静态图像,这些图像最初放在公共文件夹中。这导致节点经常使用一个CPU核心的近100%。由于内存有限,应用程序崩溃
我目前正在使用的变通方法
如果您不想解决这些问题,请考虑从外部服务(例如AWS S3)服务资产。
我终于找到了解决办法。我把所有东西都放在/public/lib/中。然后,在/usr/lib/meteor/app/run.js的第286行,我添加了我不想让meteor观看的文件夹:self.exclude_paths=[path.join(app_dir,.meteor,.local'),path.join(app_dir,'public,'lib')通过这种方式,我可以在lib中拥有我想要的任意多的文件,而且它们不会降低所有速度。include路径是“/lib/dojo/dojo.js”。很好的修复方法,您应该向他们发送一个补丁,并将其作为下面的答案发布。@Mathieu建议的解决方法应该可以很好地用于此目的,但Meteor应该在本机上支持类似的内容。这也是作为GitHub问题提交的,这是继续讨论此问题或跟踪其解决方案的适当场所@BjoernRennhak你知道你链接的问题的答案实际上是引用了这个主题,对吗?目标是让meteor服务,但不要观看目录中的资产文件,最好是我公开的所有大型视频文件。您的排除路径行是否继续为文件提供服务?如果您要在*.meter.com上部署此应用程序,则会出现问题-这将导致错误-这是因为Meteor忽略(实际上没有)。静态目录
fs = Npm.require('fs')
mime = Npm.require('mime')
WebApp.rawConnectHandlers.use (req, res, next) ->
re = /^\/static\/(.*)$/.exec(req.url)
if re isnt null # Only handle URLs that start with /static/*
filePath = process.env.PWD + "/public/.#static/" + re[1]
type = mime.lookup(filePath)
data = fs.readFileSync(filePath, data)
res.writeHead 200,
"Content-Type": type
res.write data
res.end()
else # Other urls will have default behaviors
next()
return