当前位置 : 主页 > 网页制作 > Dojo >

dojo – 如何防止Meteor看文件?

来源:互联网 收集:自由互联 发布时间:2021-06-15
我想使用 Dojo Toolkit与 Meteor. 我首先将整个Dojo Toolkit树复制到/ public中 然后,我将它包含在客户端: script src="/dojo/dojo.js" data-dojo-config="async: true"/script` 一切正常,除了Meteor实际上监视/ pub
我想使用 Dojo Toolkit与 Meteor.

>我首先将整个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)提供资产.

网友评论