@eggjs/view

中文文档
4.1.0发布于 2026/10/07MITTypeScriptES Module构建来源已验证近 30 天下载 4700

彩蛋底部视图插件

中文使用文档
文档目录15 节
  1. 安装
  2. 使用量
  3. 使用模板引擎
  4. 使用多视图引擎
  5. 如何写入视图插件
  6. 查看引擎
  7. 登记册
  8. 配置
  9. 配置
  10. 根号
  11. 默认扩展
  12. 视图引擎和默认视频引擎
  13. 问题和建议
  14. 许可证
  15. 贡献者

@eggjs/视图

NPM version NPM download Node.js Version PRs Welcome CodeRabbit Pull Request Reviews

彩蛋底部视图插件

它是一个已经内置的用于鸡蛋的插件.

安装

npm i @eggjs/view

使用量

// {app_root}/config/plugin.ts
export default {
  view: {
    enable: true,
    package: '@eggjs/view',
  },
};

使用模板引擎

@eggjs/视图 没有内置视图引擎,所以你应该选择一个模板引擎,比如 简况,并安装 蛋景画 插件 .

您可以先选择模板引擎, 链接 简况,所以我们使用 蛋景画 插件 .

egg-view 进入 鸡蛋,所以你只需要配置 蛋景画。 。 。 .

// config/plugin.ts
export default {
  ejs: {
    enable: true,
    package: 'egg-view-ejs',
  },
};

配置映射, 文件为 .ejs 扩展将由 ejs 提供.

// config/config.default.ts
export default {
  view: {
    mapping: {
      '.ejs': 'ejs',
    },
  },
};

在控制器中,你可以打电话 ctx.render。 。 。 .

export default (app: Application) => {
  return class UserController extends app.Controller {
    async list() {
      const { ctx } = this;
      await ctx.render('user.ejs');
    }
  };
}

如果你打电话 ctx.renderString,您应当在视图选项中指定视图引擎.

export default (app: Application) => {
  return class UserController extends app.Controller {
    async list() {
      const { ctx } = this;
      ctx.body = await ctx.renderString(
        '<%= user %>',
        { user: 'popomore' },
        {
          viewEngine: 'ejs',
        }
      );
    }
  };
}

使用多视图引擎

[egg-view]支持多视图引擎,因此在一个应用程序中可以使用多个模板引擎.

如果您想要添加其它模板引擎, 如 尼姑,然后可以添加 蛋-观-出 插件 .

配置插件和映射

// config/plugin.ts
export default {
  ejs: {
    enable: true,
    package: 'egg-view-ejs',
  },
  nunjucks: {
    enable: true,
    package: 'egg-view-nunjucks',
  },
};
// config/config.default.ts
export default {
  view: {
    mapping: {
      '.ejs': 'ejs',
      '.nj': 'nunjucks',
    },
  },
};

您可以简单地将文件转换为 .nj 扩展名.

await ctx.render('user.nj');

如何写入视图插件

你用得着 @eggjs/视图用于注册插件的 API .

查看引擎

首先创建视图引擎类, 并执行 render 财务报告和审定财务报表 renderString,如果模板引擎不支持,只需丢出一个错误. 视图引擎为上下文级别,因此在 constructor。 。 。 .

// lib/view.ts
export default class MyView {
  constructor(ctx) {
    // do some initialize
    // get the plugin config from `ctx.app.config`
  }

  async render(fullpath: string, locals: Record<string, any>) {
    return myengine.render(fullpath, locals);
  }

  async renderString() {
    throw new Error('not implement');
  }
}

render 财务报告和审定财务报表 renderString 支持生成器函数,同位素函数,或普通函数返回承诺.

如果模板引擎只支持回调,你可以用"承诺"来包接.

class MyView {
  render(fullpath, locals) {
    return new Promise((resolve, reject) => {
      myengine.render(fullpath, locals, (err, result) => {
        if (err) {
          reject(err);
        } else {
          resolve(result);
        }
      });
    });
  }
}

这些方法有三个论点:, renderString 将会通过 tpl 作为第一个参数而不是名称在 render。 。 。 .

render(name, locals, viewOptions)

  • 名称: 可以从 root 中解析的文件路径 (app/view (默认)
  • 本地数据: 模板使用的数据
  • 视图选项:每次渲染的视图选项,可以覆盖视图默认配置 config/config.default.js。插件如果有配置,则应执行. 执行视图引擎时,您将收到来自 render,选项包括:
    • root: 蛋景会将名称解为完整路径,但在视图选项中将根和名进行分解.
    • 名称: 调用时的原名
    • 本地: 调用时的原本地人

renderString(tpl, locals, viewOptions)

  • tpl: 模板字符串而不是文件, 使用在 renderString
  • 当地人: 与 render
  • 视图选项: 与 render

登记册

在定义了视图引擎后,可以注册.

// app.ts
import type { Application } from 'egg';
import MyView from './lib/view';

export default (app: Application) => {
  app.view.use('myName', MyView);
}

你可以定义一个视图引擎名称,通常是一个模板名称.

配置

定义插件名称并依赖 @eggjs/视图

{
  "eggPlugin": {
    "name": "myName",
    "dependencies": ["view"]
  }
}

设置默认配置 config/config.default.ts,名称等于插件名称.

export default {
  myName: {},
};

参见一些例子

配置

根号

根为 ${baseDir}/app/view ,但您可以定义多个目录,由 ,。 。 。 . @eggjs/视图 将会从所有根目录中找到一个文件.

export default (appInfo: EggAppInfo) => {
  const baseDir = appInfo.baseDir;
  return {
    view: {
      root: `${baseDir}/app/view,${baseDir}/app/view2`,
    },
  };
}

默认扩展

在提交文件时,您应当指定一个扩展名,允许 @eggjs/视图 你知道你想用什么引擎吗. 但是,你可以定义 defaultExtension 不写入扩展名.

// config/config.default.ts
export default {
  view: {
    defaultExtension: '.html',
  },
};

// controller
export default (app: Application) => {
  return class UserController extends app.Controller {
    async list() {
      const { ctx } = this;
      // render user.html
      await ctx.render('user');
    }
  }
}

视图引擎和默认视频引擎

使用时 renderString,请在视图配置中指定视图Engine,见上文示例.

不过,你可以定义 defaultViewEngine 不每次设置.

// config/config.default.ts
export default {
  view: {
    defaultViewEngine: 'ejs',
  },
};

见 配置/ 配置. 默认. ts 更详细.

问题和建议

请打开一个问题 这里。 。 。 .

许可证

麻省理工学院

贡献者

Contributors

制造的 贡献者-img。 。 。 .

版本与发布记录

@eggjs/view 共发布 53 个版本,首次发布于 2025/02/04;过去 12 个月发布了 33 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.1.0latest2026/10/071 个月前
4.0.22026/10/061 个月前
4.0.2-rc.1rc2026/10/061 个月前
4.0.2-rc.02026/09/231 个月前
4.0.2-beta.27beta2026/09/201 个月前
4.0.2-beta.262026/08/073 个月前

关于 @eggjs/view 的常见问题

@eggjs/view 是什么?

彩蛋底部视图插件

如何安装 @eggjs/view?

在项目目录运行 npm install @eggjs/view,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:egg(4.2.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@eggjs/view 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@eggjs/view 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@eggjs/view 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.18.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@eggjs/view 可以商用吗?

@eggjs/view 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@eggjs/view 的下载量有多少?

根据 npm 官方下载统计,@eggjs/view 在 2026/10/13 – 2026/11/11 这 30 天内被下载 4,700 次,日均约 157 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@eggjs/view 还在维护吗?

最新版本 4.1.0 发布于 2026/10/07(1 个月前);至今共发布 53 个版本,其中过去 12 个月发布了 33 个;首次发布于 2025/02/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。