>我首先将整个Dojo Toolkit树复制到/ public中
>然后,我将它包含在客户端:
<script src="/dojo/dojo.js" data-dojo-config="async: true"></script>`
一切正常,除了Meteor实际上监视/ public中的每个文件进行更改,以便它可以重新启动服务器.这实际上是在localhost:3000的第一个请求期间造成很长的延迟.
有没有一种防止Meteor从某个目录看文件的方法?
Dojo Toolkit是10k文件,所以我得到了声明为here的EMFILE错误
sudo sh -c 'echo 16384 > /proc/sys/fs/inotify/max_user_watches'意识到这是重复的: generating and serving static files with Meteor
见:https://github.com/meteor/meteor/issues/437
这是我的一个主要问题.我必须提供〜12000个静态图像,我最初放入公用文件夹.这导致节点不断使用一个CPU内核的近100%.由于内存有限,应用程序崩溃.
我正在使用的解决方法
>创建文件夹public /.# static /并将所有静态资产移动到其中.流星没有观看这个文件夹
>带静态的前缀urls(/img/cat.png – > /static/img/cat.png)
>安装mime npm包
cd ~/.meteor/tools/latest/lib/node_modules/ npm install mime
>创建一个rawConnectionHandler来为资产提供服务(信用:https://stackoverflow.com/a/20358612)
服务器/ static_files_handler.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
这种方法的局限性:
>不适合使用查询参数提供资产.正则表达式还将匹配/static/html/image.html?src=/static/img/cat.png尝试提供包含参数的文件名的文件.这很容易改变.
>流星完全不知道这些文件,因此它们不会被包含在Appcache清单中.如果要让它们脱机使用,请查看我添加到https://github.com/buildhybrid/appcache-extra的addPaths选项
如果您不想解决问题,请考虑从外部服务(例如AWS S3)提供资产.