{"id":15023266,"url":"https://github.com/scautank/knc-render","last_synced_at":"2026-02-06T09:04:05.126Z","repository":{"id":80120504,"uuid":"63059529","full_name":"scautank/knc-render","owner":"scautank","description":"基于koa和nunjucks的服务端组件化渲染方案","archived":false,"fork":false,"pushed_at":"2016-09-16T11:39:43.000Z","size":21,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-29T12:39:41.809Z","etag":null,"topics":["koa","nunjucks"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scautank.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-07-11T10:40:54.000Z","updated_at":"2023-03-10T09:34:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"6fb7544d-ff54-4437-afd2-d7f6f7323aa7","html_url":"https://github.com/scautank/knc-render","commit_stats":{"total_commits":8,"total_committers":1,"mean_commits":8.0,"dds":0.0,"last_synced_commit":"8b5623bf9d5547fa2a9fb39f105f3330076a1431"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/scautank/knc-render","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scautank%2Fknc-render","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scautank%2Fknc-render/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scautank%2Fknc-render/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scautank%2Fknc-render/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scautank","download_url":"https://codeload.github.com/scautank/knc-render/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scautank%2Fknc-render/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267616582,"owners_count":24116155,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["koa","nunjucks"],"created_at":"2024-09-24T19:58:53.393Z","updated_at":"2026-02-06T09:04:05.056Z","avatar_url":"https://github.com/scautank.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# knc-render\n\n基于koa和nunjucks的服务端组件化渲染方案\n\n----\n\n[![NPM version][npm-image]][npm-url]\n[![Build status][travis-image]][travis-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[npm-image]: https://img.shields.io/npm/v/knc-render.svg\n[npm-url]: https://npmjs.org/package/knc-render\n[travis-image]: https://img.shields.io/travis/scautank/knc-render.svg\n[travis-url]: https://travis-ci.org/scautank/knc-render\n[downloads-image]: http://img.shields.io/npm/dm/knc-render.svg\n[downloads-url]: https://npmjs.org/package/knc-render\n\n## 特性\n\n- 基于koa和nunjucks\n- 组件化开发\n- 需要搭配构建工具shaun使用\n\n## 安装\n\n```bash\n  npm install knc-render --save\n```\n\n## 使用\n\n#### 启动\n\n```text\n// template render\nconst app = new Koa();\nconst KncRender = require('knc-render');\n\n// new KncRender(koaContext, renderOptions, [comboOptions]);\nconst kncRender = new KncRender(app, {\n    ext: 'html', // 模板后缀名\n    path: '', // 模板路径\n    componentPath: '', // 组件路径\n    componentDefaultTmpl: 'index', // 组件默认模板名\n    staticURL: '/combo?', // 静态资源路径\n    staticCombo: true, // 静态资源是否开启combo\n    staticMap: {}, // 静态资源表\n    filter: {}, // nunjucks模板过滤器\n    dataFilter: function(data, extra) {}, // 数据过滤\n    nunjucksConfig: { // nunjucks配置\n        autoescape: true,\n        watch: true\n    }\n}, {\n    dir: '', // 读取文件目录\n    ext: ['js', 'css'], // 允许读取文件的后缀名\n    maxAge: 60 * 60 * 1000 // 缓存时间，默认一天\n});\n\nkncRender.start();\n```\n\n#### require\n\n```text\n关闭combo的时候，require进来的资源为staticURL目录下的文件\n打开combo的时候，require进来的资源应该是dir目录下的，包含在ext里面的后缀名的文件\n{% require \"c_list/index.js\" %}\n```\n\n#### component\n\ncomponent可以有4个参数，name,data,theme,extra\n`name`为组件名，`data`为数据，`theme`为主题名，`extra`为额外参数，会直接做为`dataFilter`的第二个参数\n\n```text\n{% component name=\"c_list\",data=\"\" %}\n这种情况会找componentPath目录下的c_list目录下的[componentDefaultTmpl.ext]文件，并且直接拿data来进行渲染\n```\n\n#### 资源表格式\n\n```text\n{\n    \"css/header.css\": \"css/header-423dsdol.css\",\n    \"js/header.js\": \"js/header-gk34o1k3.js\" \n}\n```\n\n#### 占位符\n\n```text\n如果html文件里面包含\u003c!-- [STYLE PLACEHOLDER] --\u003e，则样式相关会插入这个位置，如果没有默认\u003c/head\u003e之前；\n如果html文件里面包含\u003c!-- [SCRIPT PLACEHOLDER] --\u003e，则脚本相关会插入这个位置，如果没有默认\u003c/body\u003e之前\n```\n\n## 组件规范\n\n```text\n- c_header\n |- images\n |- scss\n |- js\n |- index.html\n |- index.scss\n |- index.js\n |- schema.json\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscautank%2Fknc-render","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscautank%2Fknc-render","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscautank%2Fknc-render/lists"}