{"_id":"@blueking/bk-trace","_rev":"6-fba68afbbf864b43a34224b773f67c67","name":"@blueking/bk-trace","dist-tags":{"latest":"1.0.3"},"versions":{"0.0.1":{"name":"@blueking/bk-trace","version":"0.0.1","keywords":[],"author":"","license":"ISC","_id":"@blueking/bk-trace@0.0.1","maintainers":[{"name":"blueking","email":"contactus_bk@tencent.com"}],"dist":{"shasum":"39ec6a4749aa4ae037de6ea8e249a178f82359ec","tarball":"https://registry.npmjs.org/@blueking/bk-trace/-/bk-trace-0.0.1.tgz","fileCount":13,"integrity":"sha512-v4jSAo1lOzd4RlOhqGmZUvkT9f+KVIhy1Zx9lxyMpu1ekP+2bQzrOMjxacanBGxmZVAxxoZZm4VtOu4dPzQqeg==","signatures":[{"sig":"MEUCIQDbLjIdSZQTwVzjGloCBp28OyzrCZKadnyYxQYKUm9jzAIgRKfrxBNQQeGVwpLfRp0CDrbt5gCeHCK90wRDg9hMmVU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26899},"main":"dist/trace.js","gitHead":"ecf3b9a464d13f7a51d1eb5fb3ddaf0ceaef9609","scripts":{"build":"webpack --config webpack.config.prod.js --mode=production --node-env=production","serve":"webpack serve --config webpack.config.dev.js"},"_npmUser":{"name":"blueking","email":"contactus_bk@tencent.com"},"_npmVersion":"10.1.0","description":"基于蓝鲸体系用户数据上报插件","directories":{},"_nodeVersion":"20.9.0","dependencies":{"lodash":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^2.7.16","ts-loader":"^9.5.1","vue-loader":"^15.11.1","vue-router":"^3.6.5","webpack-cli":"^5.1.4","@types/lodash":"^4.17.0","webpack-dev-server":"^5.0.4","html-webpack-plugin":"^5.6.0","vue-template-compiler":"^2.7.16","workbox-webpack-plugin":"^7.0.0","@webpack-cli/generators":"^3.0.7"},"_npmOperationalInternal":{"tmp":"tmp/bk-trace_0.0.1_1713871379983_0.7081214686606039","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@blueking/bk-trace","version":"1.0.0","keywords":["blueking","web monitor"],"author":{"name":"Tencent BlueKing"},"license":"ISC","_id":"@blueking/bk-trace@1.0.0","maintainers":[{"name":"blueking","email":"contactus_bk@tencent.com"}],"dist":{"shasum":"834da4e767425a0a50f2b580478c7d9f3e823579","tarball":"https://registry.npmjs.org/@blueking/bk-trace/-/bk-trace-1.0.0.tgz","fileCount":95,"integrity":"sha512-hAhZWfQ3g42Vgg20Krydf/PuMgPEvFY8+g5iYYSHyDjikP+3vgGD5EGl2rA3QVjJJKSx7CI2ATYnZgmAkLQVtA==","signatures":[{"sig":"MEYCIQDqHGtvRpLMy1+MtytldcFczjD9YmIIsuqqA8yUa88l4QIhAOsJo1IDP6u4fB0cuV2gYpLa1MNaEnbT2lXj/Jeb74KG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121622},"_from":"file:blueking-bk-trace-1.0.0.tgz","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"scripts":{"lint":"eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","build":"rollup -c","start":"node site/server/server.js","commit":"git-cz","release":"pnpm build && pnpm publish","changeset":"changeset","version-packages":"changeset version"},"_npmUser":{"name":"blueking","email":"contactus_bk@tencent.com"},"_resolved":"/private/var/folders/m_/ynyzlr8x2qn_dx_kyc_d_yv80000gn/T/cecb904558f2c248304fa2fc0d43276a/blueking-bk-trace-1.0.0.tgz","_integrity":"sha512-hAhZWfQ3g42Vgg20Krydf/PuMgPEvFY8+g5iYYSHyDjikP+3vgGD5EGl2rA3QVjJJKSx7CI2ATYnZgmAkLQVtA==","_npmVersion":"10.8.2","description":"数据上报","directories":{},"lint-staged":{"**/*.{ts,tsx,json}":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.1","dependencies":{"tslib":"^2.4.1","core-js":"^3.19.1","web-vitals":"^3.1.0","ua-parser-js":"^1.0.32","path-to-regexp":"^6.2.0","error-stack-parser":"^2.1.4"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.2","eslint":"^8.29.0","rollup":"^2.78.0","prettier":"^2.8.0","ts-loader":"^9.4.2","commitizen":"^4.2.6","typescript":"^4.9.4","lint-staged":"^13.1.0","@changesets/cli":"^2.27.7","@commitlint/cli":"^17.3.0","rollup-plugin-dts":"^5.0.0","@rollup/plugin-json":"^5.0.2","rollup-plugin-uglify":"^6.0.4","eslint-plugin-prettier":"^4.2.1","@rollup/plugin-commonjs":"^23.0.3","@typescript-eslint/parser":"^5.46.1","cz-conventional-changelog":"^3.3.0","rollup-plugin-typescript2":"^0.34.1","@rollup/plugin-node-resolve":"^15.0.1","@commitlint/config-conventional":"^17.3.0","@typescript-eslint/eslint-plugin":"^5.46.1"},"_npmOperationalInternal":{"tmp":"tmp/bk-trace_1.0.0_1739262457585_0.7581376973590914","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@blueking/bk-trace","version":"1.0.1","keywords":["blueking","web monitor"],"author":{"name":"Tencent BlueKing"},"license":"ISC","_id":"@blueking/bk-trace@1.0.1","maintainers":[{"name":"blueking","email":"contactus_bk@tencent.com"}],"dist":{"shasum":"ceddf32bba1ce459d7c73ef18f3b38cf06a49b19","tarball":"https://registry.npmjs.org/@blueking/bk-trace/-/bk-trace-1.0.1.tgz","fileCount":95,"integrity":"sha512-9bRc5LGvL+gttfEXyC03oF3Rjteoa+r2gB3hALElxHkj+2It7LtDkcWyVuS8LlqFvW5y30Kv/yuDR5mpClbrCg==","signatures":[{"sig":"MEUCIFPrlnuUzEVIuXgJ2x4X3KcjiiGB7wcj8Q+2v3gB4CyeAiEApszwCsyfh7IIippUQNLikxA6k8NjaRL23j6ppHQQJoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121632},"_from":"file:blueking-bk-trace-1.0.1.tgz","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"scripts":{"lint":"eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","build":"rollup -c","start":"node site/server/server.js","commit":"git-cz","release":"pnpm build && pnpm publish","changeset":"changeset","version-packages":"changeset version"},"_npmUser":{"name":"blueking","email":"contactus_bk@tencent.com"},"_resolved":"/private/var/folders/m_/ynyzlr8x2qn_dx_kyc_d_yv80000gn/T/abc015d59d8fc6ffe44d699bf2f7adcd/blueking-bk-trace-1.0.1.tgz","_integrity":"sha512-9bRc5LGvL+gttfEXyC03oF3Rjteoa+r2gB3hALElxHkj+2It7LtDkcWyVuS8LlqFvW5y30Kv/yuDR5mpClbrCg==","_npmVersion":"10.8.2","description":"数据上报","directories":{},"lint-staged":{"**/*.{ts,tsx,json}":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.1","dependencies":{"tslib":"^2.4.1","core-js":"^3.19.1","web-vitals":"^3.1.0","ua-parser-js":"^1.0.32","path-to-regexp":"^6.2.0","error-stack-parser":"^2.1.4"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.2","eslint":"^8.29.0","rollup":"^2.78.0","prettier":"^2.8.0","ts-loader":"^9.4.2","commitizen":"^4.2.6","typescript":"^4.9.4","lint-staged":"^13.1.0","@changesets/cli":"^2.27.7","@commitlint/cli":"^17.3.0","rollup-plugin-dts":"^5.0.0","@rollup/plugin-json":"^5.0.2","rollup-plugin-uglify":"^6.0.4","eslint-plugin-prettier":"^4.2.1","@rollup/plugin-commonjs":"^23.0.3","@typescript-eslint/parser":"^5.46.1","cz-conventional-changelog":"^3.3.0","rollup-plugin-typescript2":"^0.34.1","@rollup/plugin-node-resolve":"^15.0.1","@commitlint/config-conventional":"^17.3.0","@typescript-eslint/eslint-plugin":"^5.46.1"},"_npmOperationalInternal":{"tmp":"tmp/bk-trace_1.0.1_1739263176826_0.06491561997021811","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@blueking/bk-trace","version":"1.0.2","keywords":["blueking","web monitor"],"author":{"name":"Tencent BlueKing"},"license":"ISC","_id":"@blueking/bk-trace@1.0.2","maintainers":[{"name":"blueking","email":"contactus_bk@tencent.com"}],"dist":{"shasum":"95b2bd7dcef9c6cf8c29debc43f5fe2d1b05bcbe","tarball":"https://registry.npmjs.org/@blueking/bk-trace/-/bk-trace-1.0.2.tgz","fileCount":95,"integrity":"sha512-3Fqsd9D3iTS0t7eTI9mWWzFaoYeSHTGNolFgw69Gv+Phee9hDrVZuZfyZvZzOylj/CZQS2JvnHtV2sEdEdx4bA==","signatures":[{"sig":"MEUCIQC5znvx/MximfySgADw6NLCJw+giTOH4ogL5RHr/dGz9gIgbAmr88Vom+XzQKcBdUGbPqLS01X23b17PRQGqnZU8GE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121995},"_from":"file:blueking-bk-trace-1.0.2.tgz","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"scripts":{"lint":"eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","build":"rollup -c","start":"node site/server/server.js","commit":"git-cz","release":"pnpm build && pnpm publish","changeset":"changeset","version-packages":"changeset version"},"_npmUser":{"name":"blueking","email":"contactus_bk@tencent.com"},"_resolved":"/private/var/folders/m_/ynyzlr8x2qn_dx_kyc_d_yv80000gn/T/fb72a20cee33fa1af958999819970bcd/blueking-bk-trace-1.0.2.tgz","_integrity":"sha512-3Fqsd9D3iTS0t7eTI9mWWzFaoYeSHTGNolFgw69Gv+Phee9hDrVZuZfyZvZzOylj/CZQS2JvnHtV2sEdEdx4bA==","_npmVersion":"10.8.2","description":"数据上报","directories":{},"lint-staged":{"**/*.{ts,tsx,json}":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.1","dependencies":{"tslib":"^2.4.1","core-js":"^3.19.1","web-vitals":"^3.1.0","ua-parser-js":"^1.0.32","path-to-regexp":"^6.2.0","error-stack-parser":"^2.1.4"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.2","eslint":"^8.29.0","rollup":"^2.78.0","prettier":"^2.8.0","ts-loader":"^9.4.2","commitizen":"^4.2.6","typescript":"^4.9.4","lint-staged":"^13.1.0","@changesets/cli":"^2.27.7","@commitlint/cli":"^17.3.0","rollup-plugin-dts":"^5.0.0","@rollup/plugin-json":"^5.0.2","rollup-plugin-uglify":"^6.0.4","eslint-plugin-prettier":"^4.2.1","@rollup/plugin-commonjs":"^23.0.3","@typescript-eslint/parser":"^5.46.1","cz-conventional-changelog":"^3.3.0","rollup-plugin-typescript2":"^0.34.1","@rollup/plugin-node-resolve":"^15.0.1","@commitlint/config-conventional":"^17.3.0","@typescript-eslint/eslint-plugin":"^5.46.1"},"_npmOperationalInternal":{"tmp":"tmp/bk-trace_1.0.2_1739266179040_0.32256505448379724","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@blueking/bk-trace","version":"1.0.3","keywords":["blueking","web monitor"],"author":{"name":"Tencent BlueKing"},"license":"ISC","_id":"@blueking/bk-trace@1.0.3","maintainers":[{"name":"blueking","email":"contactus_bk@tencent.com"}],"dist":{"shasum":"f65cf8132b42ea4bc4f0160faf7605703d4d87e8","tarball":"https://registry.npmjs.org/@blueking/bk-trace/-/bk-trace-1.0.3.tgz","fileCount":95,"integrity":"sha512-J6QfrXXi59cXGqdrtU6FkKaPhwVa7c419rQD52cKLEHKExLrE4C+e3y62mpNYNPlMh/25IE0tZDrCOH4fppinw==","signatures":[{"sig":"MEUCIBT9ILyOQirLaiFW6CDxrLFb3yYLfv8tndKSXfeSplzxAiEApVIlljRsbIDQT0rKEO4P0TkjB8DR/ru9sgIIVZvaHGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122165},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"gitHead":"6002b90cd2d10013ba744c5c295feab8f7a60153","scripts":{"lint":"eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","build":"rollup -c","start":"node site/server/server.js","commit":"git-cz","prepare":"husky install","publish":"changeset publish --registry=https://registry.npmjs.com/ --access=public","release":"pnpm build && pnpm publish","changeset":"changeset","version-packages":"changeset version"},"_npmUser":{"name":"blueking","email":"contactus_bk@tencent.com"},"_npmVersion":"10.8.2","description":"数据上报","directories":{},"lint-staged":{"**/*.{ts,tsx,json}":["prettier --write","eslint --fix"]},"_nodeVersion":"20.18.1","dependencies":{"tslib":"^2.4.1","core-js":"^3.19.1","web-vitals":"^3.1.0","ua-parser-js":"^1.0.32","path-to-regexp":"^6.2.0","error-stack-parser":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.6.0","devDependencies":{"husky":"^8.0.2","eslint":"^8.29.0","rollup":"^2.78.0","prettier":"^2.8.0","ts-loader":"^9.4.2","commitizen":"^4.2.6","typescript":"^4.9.4","lint-staged":"^13.1.0","@changesets/cli":"^2.27.7","@commitlint/cli":"^17.3.0","rollup-plugin-dts":"^5.0.0","@rollup/plugin-json":"^5.0.2","rollup-plugin-uglify":"^6.0.4","eslint-plugin-prettier":"^4.2.1","@rollup/plugin-commonjs":"^23.0.3","@typescript-eslint/parser":"^5.46.1","cz-conventional-changelog":"^3.3.0","rollup-plugin-typescript2":"^0.34.1","@rollup/plugin-node-resolve":"^15.0.1","@commitlint/config-conventional":"^17.3.0","@typescript-eslint/eslint-plugin":"^5.46.1"},"_npmOperationalInternal":{"tmp":"tmp/bk-trace_1.0.3_1741837778529_0.8029283384954158","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2024-04-23T11:22:59.812Z","modified":"2026-01-15T04:03:38.868Z","0.0.1":"2024-04-23T11:23:00.176Z","1.0.0":"2025-02-11T08:27:37.780Z","1.0.1":"2025-02-11T08:39:37.009Z","1.0.2":"2025-02-11T09:29:39.266Z","1.0.3":"2025-03-13T03:49:38.732Z"},"author":{"name":"Tencent BlueKing"},"license":"ISC","keywords":["blueking","web monitor"],"description":"数据上报","maintainers":[{"email":"contactus_bk@tencent.com","name":"blueking-magicbox"}],"readme":"# 数据上报插件\n\n用于上报前端事件上报，统计界面PV和UV这些\n\n## 如何安装\n\n### Vue3项目\n\n1. 安装最新SDK\n\n```shell\nnpm i @blueking/bk-trace-core@latest\n```\n\n2. 在项目入口引入SDK\n\n```typescript\nimport { createApp } from 'vue';\nimport App from './App';\n\n// 引入SDK\nimport BkTrace from '@blueking/bk-trace-core';\n\n// 性能和屏幕录制包（安装需求安装）\n// import BkTracePerformance from '@blueking/bk-trace-performance';\n// import BkTraceRecord from '@blueking/bk-trace-recordscreen';\n\n// BkTrace.use(BkTracePerformance);\n// BkTrace.use(BkTraceRecord);\n\ncreateApp(App)\n  .use(BkTrace, {\n    url: '/api/report', // 上报地址\n    appCode: 'bk-test',// 你的APP名称\n    appVersion: 'bcs-v1.0.0',// 你的APP版本\n    spaceID: 'testproject', // 当前空间\n    spaceType: 'project', // 当前空间类型\n  })\n  .mount('#app');\n```\n\n### Vue2项目\n\n1. 安装最新SDK\n\n```shell\nnpm i @blueking/bk-trace-core@latest\n```\n\n2. 在项目入口引入SDK\n\n```typescript\nimport Vue from 'vue';\n\n// 引入SDK\nimport BkTrace from '@blueking/bk-trace-core';\n\n// 性能和屏幕录制包（安装需求安装）\n// import BkTracePerformance from '@blueking/bk-trace-performance';\n// import BkTraceRecord from '@blueking/bk-trace-recordscreen';\n\n// BkTrace.use(BkTracePerformance);\n// BkTrace.use(BkTraceRecord);\n\nVue.use(BkTrace);\n```\n\n## 手动上报\n\n默认会自动上报UV和PV数据，也可以手动上报自定义数据\n\n```html\n<span v-bk-trace.click=\"{ ct: '用户点击span' }\">点击span</span>\n```\n\n## 配置说明\n\n| 名称                       | 描述                           | 类型                                  | 默认值    |\n|--------------------------|------------------------------|---------------------------------------|---------|\n| url                      | 上报的地址                       | string                               |         |\n| appCode                  | 应用code                     | string                               |         |\n| appVersion               | APP版本                     | string                               |         |\n| spaceType                | 空间类型                       | SpaceType                            |         |\n| spaceID                  | 空间ID                        | string                               |         |\n| user                     | 用户id                        | string                               |         |\n| disabled                 | 是否禁用SDK                   | boolean                              |         |\n| silentXhr                | 监控 xhr 请求                  | boolean                              | false   |\n| silentFetch              | 监控 fetch 请求                | boolean                              | false   |\n| silentClick              | 监控 click 事件               | boolean                              | false   |\n| silentError              | 监听 error 事件               | boolean                              | false   |\n| silentUnhandledrejection | 监控 unhandledrejection      | boolean                              | false   |\n| silentHashchange         | 监听路由 hash 变化            | boolean                              |         |\n| silentHistory            | 监听路由 history 变化         | boolean                              |         |\n| silentBreadcrumbs        | 记录用户行为堆栈               | boolean                              | false   |\n| recordScreenTime         | 单次录屏时长                   | number                               |         |\n| recordScreenTypeList     | 上报录屏的错误列表             | string[]                             |         |\n| silentWhiteScreen        | 开启白屏检测                   | boolean                              |         |\n| skeletonProject          | 骨架屏检测                     | boolean                              |         |\n| whiteBoxElements         | 白屏检测容器列表               | string[]                             |         |\n| filterXhrUrlRegExp       | 过滤接口请求正则               | RegExp                               |         |\n| useImgUpload             | 使用图片打点上报               | boolean                              |         |\n| throttleDelayTime        | 点击事件节流时长               | number                               |         |\n| overTime                 | 接口超时时长                   | number                               |         |\n| maxBreadcrumbs           | 用户行为最大长度               | number                               |         |\n| repeatCodeError          | 去除重复代码错误               | boolean                              |         |\n| beforePushBreadcrumb     | 行为列表前的 hook             | (data: Partial<ReportData>) => Partial<ReportData> |         |\n| beforeDataReport         | 数据上报前的 hook             | (data: ReportData) => Promise<ReportData | boolean> |         |\n| getUser                  | 用户定义                       | () => string | number               |         |\n| handleHttpStatus         | 处理接口返回 response         | (data: any) => boolean               |         |\n\n## 上报数据格式说明\n\n| 字段名   | 类型                      | 描述                           |\n|----------|---------------------------|--------------------------------|\n| **id**   | `string`                  | 唯一标识符，用于标识每一条上报数据。 |\n| **et**   | `number`                  | 事件发生的时间戳。                 |\n| **ver**  | `string`                  | 应用的版本号。                    |\n| **plv**  | `string`                  | 上报插件的版本号。                 |\n| **cc**   | `number`                  | 缓存命中次数。                    |\n| **sid**  | `string`                  | 会话ID，用于标识用户会话。          |\n| **sct**  | `number`                  | 会话计数，记录会话的次数。          |\n| **sts**  | `string`                  | 会话状态。                       |\n| **u**    | `string`                  | 当前界面的URL。                  |\n| **tit**  | `string`                  | 界面的标题。                     |\n| **uA**   | `string`                  | 浏览器的User-Agent信息。         |\n| **ul**   | `string`                  | 用户的语言设置。                  |\n| **aC**   | `string`                  | 应用的唯一标识。                  |\n| **lo**   | `string`                  | 地理位置信息。                    |\n| **sr**   | `string`                  | 显示设备的分辨率。                 |\n| **os**   | `string`                  | 操作系统信息。                    |\n| **gcd**  | `string`                  | 设备ID。                        |\n| **li**   | `number`                  | 异常发生的行号。                  |\n| **co**   | `number`                  | 异常发生的列号。                  |\n| **rat**  | `string`                  | 性能指标的评级（如FCP、LCP、TTFB、FID）。 |\n| **v**    | `string \\| number`       | 性能指标的值。                    |\n| **pE**   | `PerformanceEntry`       | 原始性能数据。                    |\n| **pRs**  | `PerformanceResourceTiming[]` | 原始性能资源数据。                |\n| **hs**   | `number`                  | JavaScript堆栈大小。             |\n| **ths**  | `number`                  | JavaScript总堆栈大小。            |\n| **uhs**  | `number`                  | JavaScript使用的堆栈大小。         |\n| **fU**   | `string`                  | 接口的URL。                     |\n| **fE**   | `number`                  | 接口请求的耗时。                  |\n| **fS**   | `number`                  | 接口状态码。                     |\n| **usr**  | `string \\| number`       | 用户名或用户ID。                 |\n| **act**  | `EVENTTYPES`             | 用户执行的操作类型。               |\n| **ct**   | `string`                  | 具体的操作类别。                  |\n| **d**    | `string`                  | 操作数据或信息。                  |\n| **to**   | `string`                  | 操作目标。                       |\n| **fr**   | `string`                  | 操作来源。                       |\n| **spt**  | `string`                  | 空间类型。                       |\n| **spid** | `string`                  | 空间ID。                        |\n| **sk**   | `Partial<ReportData>[]`  | 用户行为堆栈，记录用户的操作历史。     |","readmeFilename":"README.md"}