在 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
而是咨询一个允许您注入替代中间件的选项,那就太好了。那将是一个很好的公关。
这完全是一个撇号 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
而是咨询一个允许您注入替代中间件的选项,那就太好了。那将是一个很好的公关。