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*

    • 创建包并将其部署到存储库的正式方式。目前正在使用(捷运)和


      • 意识到这是重复的:

        见:

        这对我来说是个大问题。我必须提供大约12000张静态图像,这些图像最初放在公共文件夹中。这导致节点经常使用一个CPU核心的近100%。由于内存有限,应用程序崩溃

        我目前正在使用的变通方法

        • 创建文件夹
          public/#static/
          ,并将所有静态资产移到其中。meteor未监视此文件夹
        • 在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选项

        如果您不想解决这些问题,请考虑从外部服务(例如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')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