在 Apostrophe CMS 中实施 Express Static

Implement Express Static in Apostrophe CMS

这完全是一个撇号 CMS 问题。顺便提一下这个从未回答过的问题,我决定在 Stack Overflow 上问我的问题。我在这里找不到主题。

https://forum.apostrophecms.org/t/performance-engineering/61/2

考虑到这一点,ApostropheCMS 是一个非常酷的编辑器内 CMS,它建立在一个快速服务器上,但我不知道如何访问在典型的快速设置中,app.js 文件.

这个 npm 模块正是我们需要实现的。 https://www.npmjs.com/package/express-static-gzip

快递要加的代码:

var express = require('express');
var expressStaticGzip = require('express-static-gzip');
var app = express();

app.use('/', expressStaticGzip('/my/rootFolder/', {
    enableBrotli: true,
    customCompressions: [{
        encodingName: 'deflate',
        fileExtension: 'zz'
    }],
    orderPreference: ['br']
}));

1) 如何将其添加到标准撇号设置中? 要么 2) apostropheCMS 中是否已经内置了启用 brotli 和 gzip 的方法?

首先,Node.js 代码不是执行此操作的最佳位置。如果您通过生产反向代理(例如 nginx)在生产中实现它,并且根本不在开发中实现它,您将获得更好的性能。由于 运行 代理后面的节点始终是最佳实践,因此这对您来说应该是一个可行的选择。

然而,话虽如此,这也可以在 Node 中完成。也许你有一个用例,比如无论代理是否存在,都允许以这种方式提供预压缩文件。

apostrophe-assets 模块的 servePublicAssets 方法负责通过 express.static 服务 /public。您可以在项目级别更改它:

// in your PROJECT LEVEL lib/modules/apostrophe-assets/index.js file.

// DO NOT modify node_modules/apostrophe, you do not need to do that.

// DO NOT copy the entire index.js.

// This is all you need to override just this ONE method.

const expressStaticGzip = require('express-static-gzip');

module.exports = {
  construct: function(self, options) {
    self.servePublicAssets = function() {
      const middleware = [];
      if (self.lessMiddleware) {
        middleware.push(self.lessMiddleware);
      }
      middleware.push(expressStaticGzip(
        self.apos.rootDir + '/public',
        {
          enableBrotli: true,
          customCompressions: [
            {
              encodingName: 'deflate',
              fileExtension: 'zz'
            }
          ],
          orderPreference: ['br']
        }
      ));
      self.expressMiddleware = {
        when: 'beforeRequired',
        middleware: middleware
      };
    };
  }
};

我们确实在这里覆盖了整个方法,而不是仅仅注入不同的中间件。如果 Apostrophe 不假设您想要 express.static 而是咨询一个允许您注入替代中间件的选项,那就太好了。那将是一个很好的公关。