@arcblock/abtnode-docs
Version:
ABT Node Documentation, a help documentation for quickly get started with ABT Node.
1 lines • 21.1 kB
JSON
{"componentChunkName":"component---node-modules-arcblock-gatsby-theme-docs-src-templates-documentation-js","path":"/zh/developer/bundle-blocklets","result":{"data":{"file":{"changeTime":"5 minutes ago","childMarkdownRemark":{"frontmatter":{"author":"wangshijun","category":"","date":null,"description":"打包 Blocklet","draft":null,"keywords":"abtnode, blocklet","language":"zh","layout":"documentation","path":"/zh/developer/bundle-blocklets","tags":["abtnode"],"title":"打包 Blocklet"},"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Blocklets 在被部署到 ABT 节点实例上之前需要被打包处理。Blocklet 的打包流程和传统的 Web 应用打包非常相似,下面是教你如何打包 JavaScript Blocklet 的指引教程。"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"打包前端","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#%E6%89%93%E5%8C%85%E5%89%8D%E7%AB%AF","ariaLabel":"打包前端 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"打包前端"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"如果你的 Blocklet 是使用前端框架比如 React.js,Vue.js 构建的, 你必须将他们打包成能被 Web 服务器部署服务的静态资源文件。"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"1-获取-blocklet-did","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#1-%E8%8E%B7%E5%8F%96-blocklet-did","ariaLabel":"1 获取 blocklet did permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"1. 获取 Blocklet DID"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"进入到你的 Blocklet 目录下运行 "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"abtnode blocklet:meta | grep did"}]},{"type":"text","value":" 命令获得 blocklet did:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-shell"],"blocklet:meta":"","|":"","grep":"","did":""},"children":[{"type":"text","value":"abtnode blocklet:meta | grep did\ndid: z8iZn18zGRm5veEdhmrS2FRrUyw5ZAQcewVMH\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"2-更改资源路径","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#2-%E6%9B%B4%E6%94%B9%E8%B5%84%E6%BA%90%E8%B7%AF%E5%BE%84","ariaLabel":"2 更改资源路径 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"2. 更改资源路径"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"对于使用 "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"create-react-app"}]},{"type":"text","value":" 创建的项目,你可以使用下面的脚本来打包前端部分:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-json"],"\"PUBLIC_URL":"\\\"/z8iZn18zGRm5veEdhmrS2FRrUyw5ZAQcewVMH\\\"","react-scripts":"","build\",":""},"children":[{"type":"text","value":"\"build:client\": \"PUBLIC_URL=\\\"/z8iZn18zGRm5veEdhmrS2FRrUyw5ZAQcewVMH\\\" react-scripts build\",\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"请一定记得将 blocklet did 更换成你自己的。"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"3-使用-public_url-加载资源文件","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#3-%E4%BD%BF%E7%94%A8-public_url-%E5%8A%A0%E8%BD%BD%E8%B5%84%E6%BA%90%E6%96%87%E4%BB%B6","ariaLabel":"3 使用 public_url 加载资源文件 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"3. 使用 "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"%PUBLIC_URL%"}]},{"type":"text","value":" 加载资源文件"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"请将 "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"public/index.html"}]},{"type":"text","value":" 加上 "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"%PUBLIC_URL%"}]},{"type":"text","value":" 前缀以加载所有的资源,像下面这样:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-html"],"html>":""},"children":[{"type":"text","value":"<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"theme-color\" content=\"#000000\" />\n <!--\n manifest.json provides metadata used when your web app is installed on a\n user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n-->\n <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n <!--\n Notice the use of %PUBLIC_URL% in the tags above.\n It will be replaced with the URL of the `public` folder during the build.\n Only files inside the `public` folder can be referenced from the HTML.\n\n Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n work correctly both with client-side routing and a non-root public URL.\n Learn how to configure a non-root public URL by running `npm run build`.\n-->\n <link rel=\"stylesheet\" type=\"text/css\" href=\"%PUBLIC_URL%/icons/css/all.css\" />\n <script src=\"%PUBLIC_URL%/api/session/env\"></script>\n <title>Blockchain Manager</title>\n </head>\n\n <body>\n <noscript>You need to enable JavaScript to run this app.</noscript>\n <div id=\"root\"></div>\n <!--\n This HTML file is a template.\n If you open it directly in the browser, you will see an empty page.\n\n You can add webfonts, meta tags, or analytics to this file.\n The build step will place the bundled scripts into the <body> tag.\n\n To begin the development, run `npm start` or `yarn start`.\n To create a production bundle, use `npm run build` or `yarn build`.\n-->\n </body>\n</html>\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"4-注入-blocklet-信息脚本","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#4-%E6%B3%A8%E5%85%A5-blocklet-%E4%BF%A1%E6%81%AF%E8%84%9A%E6%9C%AC","ariaLabel":"4 注入 blocklet 信息脚本 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"4. 注入 Blocklet 信息脚本"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"然后在 head 标签中添加一个 script 标签来加载 Blocklet 信息:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-html"],"src":"__meta__.js","></script>":""},"children":[{"type":"text","value":"<script src=\"__meta__.js\"></script>\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"这个 script 将会从任何路径加载,返回的内容如下:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-javascript"]},"children":[{"type":"text","value":"window.blocklet = {\n did: 'z8ia4e5vAeDsQEE2P26bQqz9oWR1Lxg9qUMaV',\n name: 'static-demo-blocklet',\n version: '0.9.0',\n prefix: '/admin/static-demo-blocklet/',\n};\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"5-更新前端的路由配置","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#5-%E6%9B%B4%E6%96%B0%E5%89%8D%E7%AB%AF%E7%9A%84%E8%B7%AF%E7%94%B1%E9%85%8D%E7%BD%AE","ariaLabel":"5 更新前端的路由配置 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"5. 更新前端的路由配置"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"如果你使用的是一个前端路由,动态设置路由的 base 才能让前端页面正确工作:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-jsx"],"basename":""},"children":[{"type":"text","value":"<Router basename={window.blocklet ? window.blocklet.prefix : window.env.apiPrefix}>\n <WrappedApp />\n</Router>\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"6-适配-ajax-请求","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#6-%E9%80%82%E9%85%8D-ajax-%E8%AF%B7%E6%B1%82","ariaLabel":"6 适配 ajax 请求 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"6. 适配 ajax 请求"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"如果你正在使用 ajax 库比如 axios,请做如下更改:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-javascript"],"axios":"","from":"","'axios';":""},"children":[{"type":"text","value":"import axios from 'axios';\n\naxios.defaults.baseURL = '';\naxios.defaults.timeout = 200000;\n\naxios.interceptors.request.use((config) => {\n const prefix = window.blocklet ? window.blocklet.prefix : window.env.apiPrefix;\n config.baseURL = prefix || '';\n\n return config;\n});\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"打包后端","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#%E6%89%93%E5%8C%85%E5%90%8E%E7%AB%AF","ariaLabel":"打包后端 permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"打包后端"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"使用下面的脚本打包后端:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-json"],"\"DEBUG":"@abtnode/*","NODE_ENV":"production","abtnode":"","bundle":"","-w":"","api/webpack.blocklet.js\",":""},"children":[{"type":"text","value":"\"build:server\": \"DEBUG=@abtnode/* NODE_ENV=production abtnode bundle -w api/webpack.blocklet.js\",\n"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"因为我们内部使用 webpack 来打包 Blocklet 后端,你可以自定义配置:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-js"]},"children":[{"type":"text","value":"module.exports = (webpack) => ({\n optimization: {\n nodeEnv: false, // @link https://github.com/webpack/webpack/issues/7470#issuecomment-394259698\n },\n plugins: [\n new webpack.DefinePlugin({\n 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),\n }),\n ],\n});\n"}]}]}],"data":{"quirksMode":false}}}}},"pageContext":{"site":{"title":"ABT Node","description":"ABT Node Documentation","siteUrl":"https://docs.arcblock.io","logoUrl":"/abtnode/","sidebarWidth":360,"disableI18n":false,"showGetStarted":true,"defaultBanner":"/abtnode/og-banner.png"},"id":"2ef2a008-1ef9-5462-bf6a-1edea974b8a7","language":"zh","locale":"zh","languages":[{"value":"en","text":"English"},{"value":"zh","text":"简体中文"}],"headings":[{"value":"打包前端","depth":3},{"value":"1. 获取 Blocklet DID","depth":4},{"value":"2. 更改资源路径","depth":4},{"value":"3. 使用 %PUBLIC_URL% 加载资源文件","depth":4},{"value":"4. 注入 Blocklet 信息脚本","depth":4},{"value":"5. 更新前端的路由配置","depth":4},{"value":"6. 适配 ajax 请求","depth":3},{"value":"打包后端","depth":3}],"navItems":[{"group":"/home/runner/work/abtnode-docs/abtnode-docs/src","title":"ABT Node","priority":999,"link":"/"}],"version":"v0.2.20","official":true,"originalPath":"/zh/developer/bundle-blocklets","sidebarContent":[{"url":null,"title":null,"pages":[{"title":"ABT Node 文档","path":"/zh/"}]},{"url":"/zh/introduction","title":"节点入门","pages":[{"title":"节点功能概览","path":"/zh/introduction/abtnode-overview"},{"title":"如何获取 ABT 节点","path":"/zh/introduction/abtnode-setup"},{"title":"配置并启动 ABT 节点","path":"/zh/introduction/abtnode-access"}]},{"url":"/zh/marketplace","title":"应用市场","pages":[{"title":"查找和安装 Blocklet","path":"/zh/marketplace/find-and-install"},{"title":"升级或降级 Blocklet","path":"/zh/marketplace/upgrade-downgrade"}]},{"url":"/zh/blocklet","title":"应用管理","pages":[{"title":"基本管理操作","path":"/zh/blocklet/basic-operations"},{"title":"环境变量管理","path":"/zh/blocklet/environments"},{"title":"核心 Blocklets","path":"/zh/blocklet/core-blocklets"}]},{"url":"/zh/router","title":"路由管理","pages":[{"title":"什么是路由","path":"/zh/router/what-is-router"},{"title":"路由的基本用法","path":"/zh/router/basic-usage"},{"title":"给站点绑定域名以及启用 SSL","path":"/zh/router/bind-domain-and-ssl"},{"title":"localhost 证书","path":"/zh/router/certificates-for-localhost"}]},{"url":"/zh/deployment","title":"生产环境指南","pages":[{"title":"部署最佳实践","path":"/zh/deployment/best-practice"},{"title":"在 AWS 上部署","path":"/zh/deployment/from-aws-ami"},{"title":"运行在反向代理","path":"/zh/deployment/behind-reverse-proxy"},{"title":"在 Docker 中运行","path":"/zh/deployment/run-in-docker"}]},{"url":"/zh/misc","title":"其他功能","pages":[{"title":"节点配置","path":"/zh/misc/node-settings"},{"title":"成员管理","path":"/zh/misc/member-management"},{"title":"GraphQL 试验台","path":"/zh/misc/graphql-console"}]},{"url":"/zh/developer","title":"开发者指南","pages":[{"title":"配置开发环境","path":"/zh/developer/config-dev-env"},{"title":"ABT 节点 cli 工具","path":"/zh/developer/abtnode-cli"},{"title":"节点配置","path":"/zh/developer/configuration"},{"title":"节点存储目录详解","path":"/zh/developer/storage-structure"},{"title":"Blocklet 规范","path":"/zh/developer/blocklet-spec"},{"title":"创建静态 Blocklets","path":"/zh/developer/static-blocklets"},{"title":"创建 DApp Blocklets","path":"/zh/developer/dapp-blocklets"},{"title":"Blocklet 生命周期钩子","path":"/zh/developer/blocklet-hooks"},{"title":"打包 Blocklet","path":"/zh/developer/bundle-blocklets"},{"title":"发布 Blocklet","path":"/zh/developer/publish-blocklets"},{"title":"Blocklet 仓库","path":"/zh/developer/blocklet-registry"},{"title":"在 Codespaces 中开发 Blocklets","path":"/zh/developer/blocklet-codespaces"},{"title":"为 Blocklet 配置 Auth Service","path":"/zh/developer/auth-service"},{"title":"可组合的 Blocklet","path":"/zh/developer/composable-blocklet"},{"title":"Docker 镜像源列表","path":"/zh/developer/docker-registry"}]}],"communityPath":"https://community.arcblockio.cn","githubUrl":"https://github.com/ArcBlock/abtnode-docs/tree/master/src/developer/bundle-blocklets/index.zh.md"}},"staticQueryHashes":["1358860651","1619896071","1812186216","2194038815"]}