前言
安装 lowcode–platform/demo–general 的依赖的时候 出现一个报错如下
这个问题 情况还有点特别, 当时是在 我本地机器 能够正常的 安装依赖, 但是在同事的机器上面 安装不成功
6069 silly fetchPackageMetaData error for antd@^4.21.4 sha512-ufylF1APBc4d1g+6WOZMLyFWlzhFK0T+Z3bU0aKgpWngU7n/MyTZ2mvHldPSFfDA78BudXH+fIKmwSYqbXevGg== integrity checksum failed when using sha512: wanted sha512-ufylF1APBc4d1g+6WOZMLyFWlzhFK0T+Z3bU0aKgpWngU7n/MyTZ2mvHldPSFfDA78BudXH+fIKmwSYqbXevGg== but got sha512-wrNy2Hi27uM3948okG3n2GwzQKBFUn1Qn5mn2I/ALcR28rC6cTjHYOuA248Zl9ECzz3jo4TY2R0SIa+5GZ/zGA==. (8767340 bytes)
6073 verbose stack Error: sha512-ufylF1APBc4d1g+6WOZMLyFWlzhFK0T+Z3bU0aKgpWngU7n/MyTZ2mvHldPSFfDA78BudXH+fIKmwSYqbXevGg== integrity checksum failed when using sha512: wanted sha512-ufylF1APBc4d1g+6WOZMLyFWlzhFK0T+Z3bU0aKgpWngU7n/MyTZ2mvHldPSFfDA78BudXH+fIKmwSYqbXevGg== but got sha512-wrNy2Hi27uM3948okG3n2GwzQKBFUn1Qn5mn2I/ALcR28rC6cTjHYOuA248Zl9ECzz3jo4TY2R0SIa+5GZ/zGA==. (8767340 bytes)
6073 verbose stack at Transform.<anonymous> (D:ProgramFilesnodejsnode_modulesnpmnode_modulesssriindex.js:340:19)
6073 verbose stack at Transform.emit (events.js:327:22)
6073 verbose stack at endReadableNT (internal/streams/readable.js:1327:12)
6073 verbose stack at processTicksAndRejections (internal/process/task_queues.js:80:21)
6074 verbose cwd D:WebstormWorkStationslowcode-platformdemo-general
问题的分析
从上面日志可以看出 期望的 摘要为 “ufylF1APBc4d1g”, 但是实际上根据 从 nexus 拉取的包计算出来的摘要为 “wrNy2Hi27uM3948okG3n2GwzQKBFUn1Qn5mn2I”
首先 从 nexus 上面下载一下 antd-4.24.8.tgz 文件, 然后 计算一下它的 sha512 摘要
然后对比一下 nexus 上面计算的摘要, 发现 二者是能够对上的, 但是 npm 却期望的是 “ufylF1APBc4d1g”, 那么这个摘要又是从哪里来的呢?
ssri/index.js.integrityStream 中根据 ops.integrity 打上断点, 包含 "ufylF1APBc4d1g", 像上面追溯
在 make-fetch-happen/index.js.remoteFetch:337 行可以看到 请求的是 http://10.30.2.18:8081/repository/npm-public/antd/-/antd-4.24.8.tgz
integrity 来自于的是 上下文的 ops, 接着 在 make-fetch-happen/index.js.remoteFetch 中条件断点
make-fetch-happen/index.js.cachingFetch
npm-registry-fetch/index.js.regFetch
fetchers/registry/tarball.js.fromManifest 这里的 integrity "ufylF1APBc4d1g" 是从这里传下去的, 来自于 manifest._integrity
pacote/lib/finalize-manifest.js.finalizeManifest 继续往上
pacote/lib/fetchers/registry/manifest.js.annotateManifest 中将 manifest._integrity 设置为 manifest.dist.integrity
npm-pick-manifest/index.js.pickManifest 中从 packument 中获取 4.24.8 版本的元数据, 中拿到的摘要为 "ufylF1APBc4d1g"
pacote/lib/fetchers/registry/packument.js.fetchPackument 中是向 http://10.30.2.18:8081/repository/npm-public/antd 发送请求, 获取元数据, 这里拿到的 integrity 是 "ufylF1APBc4d1g"
http://10.30.2.18:8081/repository/npm-public/antd 的响应如下 http://10.30.2.18:8081/repository/npm-public/antd
pacote/lib/fetchers/registry/manifest.js.annotateManifest 中获取摘要, 优先获取的是 integrity, 其次获取的 shasum
ssri/index.js.integrityStream 的相关代码演示
这里可以看到 sri 是调用方传递下来的, 根据上面的堆栈信息可以得到是从 nexus 中访问接口拿到
newSri 是通过拿到的 tgz 文件计算得到的, 在 npm 6.14.11 中是将文件分成了多个 chunk 来计算 sha512, 但是对于整体计算结果不影响
pacote/lib/fetchers/registry/packument.js.fetchPackument 的相关代码演示
向 url http://10.30.2.18:8081/repository/npm–public/antd 发送请求, 并封装 packument
所以 大致推演一下问题
之前谁上传了 版本01 的 antd-4.24.8.tgz “携带”的有 dist.integrity, 然后 后面我们又上传了一个版本02 的 antd-4.24.8.tgz, 这两个文件内容不完全相同
我们这边通过 npm–publish.sh 上传的依赖, 没有”携带” dist.integrity, 不会更新 http://10.30.2.18:8081/repository/npm-public/antd 中的 dist.integrity
所以 出现的情况就是 http://10.30.2.18:8081/repository/npm-public/antd 中的 dist.integrity 的 sha512 摘要 和 版本02 的 antd-4.24.8.tgz 的 sha512 摘要匹配不上
进而 出现了 最开头的 npm 报出的错误 “integrity checksum failed when using sha512”
解决方式
删除仓库中的 antd 相关, 然后重新上传 antd-4.24.8.tgz 即可
“integrity checksum failed” 比较的双方, 一方是 ” http://10.30.2.18:8081/repository/npm-public/antd” 中的 dist.integrity, 另外一方是下载的依赖文件的相应算法的摘要[这里的例子中是 sha512]
在 我本地机器 能够正常的 安装依赖? 同事的机器却不能?
这主要是 我本地 npm-cache 目录缓存过 该 摘要为 “ufylF1APBc4d1g” 的 antd-4.24.8.tgz
通过调整 npm 代码, 拿到 npm 获取到的 antd-4.24.8.tgz 包
这就是 为什么我本地能够安装通过的原因了, 该包的 sha512 和 nexus 中存储的 integrity 摘要一致
如何计算 sha512 ?
通过 js 相关 api 计算文件的 sha512
之所以 又写了一个 js 的版本, 主要是 更加真实的还原 npm 计算摘要的过程
另外 npm 中将文件分成多个 chunk 来计算的方式, 这里不赘述, 效果是相同的
npm 本地缓存在哪里?
两个文件的差异
首先是文件大小 有两百k的差异
然后两个压缩包 解压之后 对比一下, 只有 package.json 存在差异, 差异内容如下
出现问题的 http://10.30.2.18:8081/repository/npm-public/antd 的响应
{
"_id": "antd",
"keywords": [
"ant",
"component",
"components",
"design",
"framework",
"frontend",
"react",
"react-component",
"ui"
],
"dist-tags": {
"latest": "4.24.8"
},
"description": "An enterprise-class UI design language and React components implementation",
"readme": "",
"repository": {
"type": "git",
"url": "https://github.com/ant-design/ant-design"
},
"users": {},
"bugs": "https://github.com/ant-design/ant-design/issues",
"license": "MIT",
"versions": {
"4.24.8": {
"license": "MIT",
"devDependencies": {
"@types/jest-environment-puppeteer": "^5.0.0",
"react-dom": "^17.0.0",
"remark-cli": "^11.0.0",
"react-color": "^2.17.3",
"@testing-library/react": "^12.0.0",
"@types/jquery": "^3.5.14",
"husky": "^8.0.1",
"react-highlight-words": "^0.18.0",
"eslint-plugin-jsx-a11y": "^6.2.1",
"react-sticky": "^6.0.3",
"css-minimizer-webpack-plugin": "^1.3.0",
"bisheng-plugin-description": "^0.1.4",
"react": "^17.0.0",
"@types/react-sticky": "^6.0.4",
"cheerio": "1.0.0-rc.12",
"@ant-design/bisheng-plugin": "^3.3.0-alpha.4",
"react-helmet-async": "~1.3.0",
"stylelint-order": "^5.0.0",
"mini-css-extract-plugin": "^1.6.2",
"pretty-format": "^29.0.0",
"http-server": "^14.0.0",
"@types/puppeteer": "^7.0.4",
"concurrently": "^7.0.0",
"eslint-plugin-jest": "^27.0.1",
"full-icu": "^1.3.0",
"rc-tween-one": "^3.0.3",
"remark-lint": "^9.0.0",
"qs": "^6.10.1",
"@types/jest-axe": "^3.5.3",
"jest-image-snapshot": "^6.0.0",
"jsonml.js": "^0.1.0",
"@types/react-window": "^1.8.2",
"@types/warning": "^3.0.0",
"scrollama": "^3.0.0",
"array-move": "^4.0.0",
"@typescript-eslint/parser": "^5.40.0",
"fetch-jsonp": "^1.1.3",
"react-dnd": "^16.0.0",
"rc-virtual-list": "^3.4.11",
"@ant-design/tools": "^15.1.2",
"jest-puppeteer": "^6.0.0",
"react-resizable": "^3.0.1",
"react-intl": "^6.0.1",
"glob": "^8.0.1",
"eslint-config-airbnb": "^19.0.0",
"@types/react-color": "^3.0.1",
"duplicate-package-checker-webpack-plugin": "^3.0.0",
"lz-string": "^1.4.4",
"react-draggable": "^4.4.3",
"eslint": "^8.0.0",
"jsdom": "^20.0.0",
"@types/react-resizable": "^3.0.0",
"bisheng": "^3.7.0-alpha.4",
"@types/lodash": "^4.14.139",
"jest-axe": "^7.0.0",
"typescript": "~4.9.3",
"bisheng-plugin-toc": "^0.4.4",
"dekko": "^0.2.1",
"lint-staged": "^13.0.3",
"@types/qs": "^6.9.7",
"less-vars-to-js": "^1.3.0",
"react-dnd-html5-backend": "^16.0.0",
"@qixian.cs/github-contributors-list": "^1.0.3",
"eslint-plugin-babel": "^5.3.0",
"prettier": "^2.3.2",
"antd": "4.x",
"webpack-bundle-analyzer": "^4.1.0",
"eslint-plugin-unicorn": "^44.0.0",
"bundlesize2": "^0.0.31",
"theme-switcher": "^1.0.2",
"react-copy-to-clipboard": "^5.0.1",
"open": "^8.0.1",
"enquire-js": "^0.2.1",
"stylelint-config-standard": "^29.0.0",
"jest-environment-jsdom": "^29.0.1",
"mockdate": "^3.0.0",
"remark-preset-lint-recommended": "^6.0.0",
"react-fast-marquee": "^1.2.1",
"@types/gtag.js": "^0.0.12",
"stylelint": "^14.9.0",
"@size-limit/file": "^8.0.0",
"semver": "^7.3.5",
"jest-environment-node": "^29.0.0",
"bisheng-plugin-react": "^1.2.0",
"rome": "^10.0.1",
"inquirer": "^9.1.2",
"stylelint-config-prettier": "^9.0.2",
"@stackblitz/sdk": "^1.3.0",
"fs-extra": "^10.0.0",
"docsearch-react-fork": "^0.0.0-alpha.0",
"simple-git": "^3.0.0",
"eslint-plugin-react-hooks": "^4.1.2",
"react-infinite-scroll-component": "^6.1.0",
"@types/react": "^18.0.0",
"chalk": "^4.0.0",
"@docsearch/css": "^3.0.0",
"xhr-mock": "^2.4.1",
"react-sortable-hoc": "^2.0.0",
"increase-memory-limit": "^1.0.7",
"rimraf": "^3.0.0",
"eslint-config-prettier": "^8.0.0",
"stylelint-declaration-block-no-ignored-properties": "^2.1.0",
"yaml-front-matter": "^4.0.0",
"@ant-design/hitu": "^0.0.0-alpha.13",
"@types/jest-image-snapshot": "^5.1.0",
"remark": "^14.0.1",
"isomorphic-fetch": "^3.0.0",
"prettier-plugin-jsdoc": "^0.4.2",
"immer": "^9.0.1",
"remove-files-webpack-plugin": "1.5.0",
"jquery": "^3.4.1",
"size-limit": "^8.0.0",
"@types/react-dom": "^18.0.0",
"eslint-plugin-compat": "~4.0.0",
"rc-footer": "^0.6.6",
"react-window": "^1.8.5",
"fast-glob": "^3.2.11",
"identity-obj-proxy": "^3.0.0",
"eslint-plugin-import": "^2.21.1",
"intersection-observer": "^0.12.0",
"@types/jest": "^29.0.0",
"cross-env": "^7.0.0",
"@testing-library/jest-dom": "^5.16.3",
"eslint-plugin-markdown": "^3.0.0",
"eslint-plugin-react": "^7.31.8",
"esbuild-loader": "^2.13.1",
"docsearch.js": "^2.6.3",
"@types/react-copy-to-clipboard": "^5.0.0",
"antd-img-crop": "^4.2.8",
"immutability-helper": "^3.0.0",
"@typescript-eslint/eslint-plugin": "^5.40.0",
"jest": "^29.4.1",
"react-github-button": "^0.1.11",
"react-router-dom": "^6.0.2",
"babel-plugin-add-react-displayname": "^0.0.5",
"@testing-library/user-event": "^14.4.2",
"@types/react-highlight-words": "^0.16.4",
"stylelint-config-rational-order": "^0.1.2"
},
"peerDependencies": {
"react-dom": ">=16.9.0",
"react": ">=16.9.0"
},
"name": "antd",
"dist": {
"tarball": "http://10.30.2.18:8081/repository/npm-public/antd/-/antd-4.24.8.tgz",
"shasum": "22f34de6857556868780dfa5fe7b374b0b71b517",
"integrity": "sha512-ufylF1APBc4d1g+6WOZMLyFWlzhFK0T+Z3bU0aKgpWngU7n/MyTZ2mvHldPSFfDA78BudXH+fIKmwSYqbXevGg=="
},
"description": "An enterprise-class UI design language and React components implementation",
"main": "lib/index.js",
"_id": "antd@4.24.8",
"contributors": [
"ant"
],
"version": "4.24.8",
"dependencies": {
"@ctrl/tinycolor": "^3.4.0",
"lodash": "^4.17.21",
"rc-dialog": "~9.0.2",
"@ant-design/icons": "^4.7.0",
"rc-field-form": "~1.27.0",
"rc-motion": "^2.6.1",
"rc-resize-observer": "^1.2.0",
"moment": "^2.29.2",
"rc-trigger": "^5.2.10",
"rc-collapse": "~3.4.2",
"rc-switch": "~3.2.0",
"rc-drawer": "~6.1.0",
"rc-progress": "~3.4.1",
"rc-upload": "~4.3.0",
"rc-menu": "~9.8.0",
"rc-rate": "~2.9.0",
"rc-segmented": "~2.1.0",
"rc-slider": "~10.0.0",
"rc-table": "~7.26.0",
"rc-tree": "~5.7.0",
"rc-select": "~14.1.13",
"rc-mentions": "~1.13.1",
"@ant-design/colors": "^6.0.0",
"rc-tree-select": "~5.5.0",
"copy-to-clipboard": "^3.2.0",
"@ant-design/react-slick": "~0.29.1",
"rc-dropdown": "~4.0.0",
"rc-steps": "~5.0.0-alpha.2",
"@babel/runtime": "^7.18.3",
"rc-tooltip": "~5.2.0",
"rc-image": "~5.13.0",
"classnames": "^2.2.6",
"rc-input-number": "~7.3.9",
"rc-cascader": "~3.7.0",
"rc-pagination": "~3.2.0",
"rc-textarea": "~0.4.5",
"rc-picker": "~2.7.0",
"scroll-into-view-if-needed": "^2.2.25",
"rc-util": "^5.22.5",
"rc-input": "~0.1.4",
"rc-notification": "~4.6.0",
"rc-tabs": "~12.5.6",
"rc-checkbox": "~2.3.0"
},
"title": "Ant Design",
"keywords": [
"ant",
"component",
"components",
"design",
"framework",
"frontend",
"react",
"react-component",
"ui"
],
"files": [
"dist",
"lib",
"es"
],
"sideEffects": [
"dist/*",
"es/**/style/*",
"lib/**/style/*",
"*.less"
],
"module": "es/index.js",
"unpkg": "dist/antd.min.js",
"typings": "lib/index.d.ts",
"scripts": {
"prepare": "husky install",
"api-collection": "antd-tools run api-collection",
"authors": "node ./scripts/generate-authors",
"build": "npm run compile && NODE_OPTIONS='--max-old-space-size=4096' npm run dist",
"bundlesize": "bundlesize --enable-github-checks",
"size-limit": "size-limit",
"check-commit": "node ./scripts/check-commit",
"check-ts-demo": "node ./scripts/check-ts-demo",
"clean": "antd-tools run clean && rm -rf es lib coverage dist report.html",
"clean-lockfiles": "rm -rf package-lock.json yarn.lock",
"prestart": "npm run version",
"precompile": "npm run version",
"pretest": "npm run version",
"predist": "npm run version",
"presite": "npm run version",
"compile": "npm run clean && antd-tools run compile",
"changelog": "node ./scripts/print-changelog",
"predeploy": "antd-tools run clean && npm run site && cp CNAME _site && npm run site:test",
"deploy": "gh-pages -d _site -r git@github.com:ant-design/4x.ant.design.git -b gh-pages",
"deploy:china-mirror": "git checkout gh-pages && git pull origin gh-pages && git push git@gitee.com:ant-design/ant-design.git gh-pages",
"dist": "antd-tools run dist",
"dist:esbuild": "ESBUILD=true npm run dist",
"dist:esbuild-no-dup-check": "ESBUILD=true NO_DUP_CHECK=true npm run dist",
"lint": "npm run tsc && npm run lint:script && npm run lint:demo && npm run lint:style && npm run lint:deps && npm run lint:md",
"lint-fix": "npm run lint-fix:script && npm run lint-fix:demo && npm run lint-fix:style",
"lint-fix:demo": "npm run lint:demo -- --fix",
"lint-fix:script": "npm run lint:script -- --fix",
"lint-fix:style": "npm run lint:style -- --fix",
"lint:demo": "eslint components/*/demo/*.md",
"lint:deps": "antd-tools run deps-lint",
"lint:md": "remark . -f -q",
"lint:script": "eslint . --ext .js,.jsx,.ts,.tsx",
"lint:style": "stylelint '{site,components}/**/*.less'",
"pre-publish": "npm run test-all -- --skip-build",
"prettier": "prettier -c --write **/*",
"rome:format": "rome format --write .",
"pub": "npm run version && antd-tools run pub",
"prepublishOnly": "antd-tools run guard",
"postpublish": "node ./scripts/post-script.js",
"site:theme": "npm run site:theme-dark && npm run site:theme-compact",
"site:theme-dark": "cross-env ESBUILD=1 ANT_THEME=dark bisheng build -c ./site/bisheng.config.js",
"site:theme-compact": "cross-env ESBUILD=1 ANT_THEME=compact bisheng build -c ./site/bisheng.config.js",
"site": "npm run site:theme && cross-env NODE_ICU_DATA=node_modules/full-icu ESBUILD=1 bisheng build --ssr -c ./site/bisheng.config.js",
"sort": "npx sort-package-json",
"sort-api": "antd-tools run sort-api-table",
"start": "antd-tools run clean && cross-env NODE_ENV=development concurrently "bisheng start -c ./site/bisheng.config.js"",
"test": "jest --config .jest.js --cache=false",
"test:update": "jest --config .jest.js --cache=false -u",
"test-all": "sh -e ./scripts/test-all.sh",
"test-node": "jest --config .jest.node.js --cache=false",
"tsc": "tsc --noEmit",
"site:test": "jest --config .jest.site.js --cache=false --force-exit",
"test-image": "jest --config .jest.image.js --no-cache -i -u",
"argos": "node ./scripts/argos-upload.js",
"version": "node ./scripts/generate-version",
"install-react-16": "npm i --no-save --legacy-peer-deps react@16 react-dom@16",
"install-react-17": "npm i --no-save --legacy-peer-deps react@17 react-dom@17",
"install-react-18": "npm i --no-save --legacy-peer-deps react@18 react-dom@18 @testing-library/react@13",
"fix-memory-limit": "cross-env LIMIT=10240 increase-memory-limit"
},
"browserslist": [
"> 0.5%",
"last 2 versions",
"Firefox ESR",
"not dead",
"IE 11",
"not IE 10"
],
"size-limit": [
{
"path": "./dist/antd.min.js",
"limit": "285 KiB"
},
{
"path": "./dist/antd.min.css",
"limit": "70 KiB"
},
{
"path": "./dist/antd.dark.min.css",
"limit": "70 KiB"
},
{
"path": "./dist/antd.compact.min.css",
"limit": "70 KiB"
},
{
"path": "./dist/antd.variable.min.css",
"limit": "70 KiB"
}
],
"bundlesize": [
{
"path": "./dist/antd.min.js",
"maxSize": "285 kB"
},
{
"path": "./dist/antd.min.css",
"maxSize": "70 kB"
},
{
"path": "./dist/antd.dark.min.css",
"maxSize": "70 kB"
},
{
"path": "./dist/antd.compact.min.css",
"maxSize": "70 kB"
},
{
"path": "./dist/antd.variable.min.css",
"maxSize": "70 kB"
}
],
"tnpm": {
"mode": "npm"
},
"lint-staged": {
"*.{ts,tsx,js}": "rome format --write",
"*.{json,less,md}": "prettier --ignore-unknown --write"
},
"_resolved": "",
"_integrity": "",
"_from": "file:E:/npmPublish/tarballs/antd/antd-4.24.8.tgz",
"readme": "",
"readmeFilename": "README.md",
"_nodeVersion": "14.17.0",
"_npmVersion": "6.14.13"
}
},
"name": "antd",
"time": {
"created": "2023-02-21T08:15:46.443Z",
"modified": "2023-02-21T09:07:05.915Z",
"4.24.8": "2023-02-21T08:15:46.443Z"
},
"contributors": [
"ant"
],
"homepage": "https://ant.design"
}
处理之后的 http://10.30.2.18:8081/repository/npm-public/antd 的响应
{
"_id": "antd",
"keywords": [
"ant",
"component",
"components",
"design",
"framework",
"frontend",
"react",
"react-component",
"ui"
],
"dist-tags": {
"latest": "4.24.8"
},
"description": "An enterprise-class UI design language and React components implementation",
"repository": {
"type": "git",
"url": "https://github.com/ant-design/ant-design"
},
"users": {},
"bugs": "https://github.com/ant-design/ant-design/issues",
"license": "MIT",
"versions": {
"4.24.8": {
"license": "MIT",
"devDependencies": {
"@types/jest-environment-puppeteer": "^5.0.0",
"react-dom": "^17.0.0",
"remark-cli": "^11.0.0",
"react-color": "^2.17.3",
"@testing-library/react": "^12.0.0",
"@types/jquery": "^3.5.14",
"husky": "^8.0.1",
"react-highlight-words": "^0.18.0",
"eslint-plugin-jsx-a11y": "^6.2.1",
"react-sticky": "^6.0.3",
"css-minimizer-webpack-plugin": "^1.3.0",
"bisheng-plugin-description": "^0.1.4",
"react": "^17.0.0",
"@types/react-sticky": "^6.0.4",
"cheerio": "1.0.0-rc.12",
"@ant-design/bisheng-plugin": "^3.3.0-alpha.4",
"react-helmet-async": "~1.3.0",
"stylelint-order": "^5.0.0",
"mini-css-extract-plugin": "^1.6.2",
"pretty-format": "^29.0.0",
"http-server": "^14.0.0",
"@types/puppeteer": "^7.0.4",
"concurrently": "^7.0.0",
"eslint-plugin-jest": "^27.0.1",
"full-icu": "^1.3.0",
"rc-tween-one": "^3.0.3",
"remark-lint": "^9.0.0",
"qs": "^6.10.1",
"@types/jest-axe": "^3.5.3",
"jest-image-snapshot": "^6.0.0",
"jsonml.js": "^0.1.0",
"@types/react-window": "^1.8.2",
"@types/warning": "^3.0.0",
"scrollama": "^3.0.0",
"array-move": "^4.0.0",
"@typescript-eslint/parser": "^5.40.0",
"fetch-jsonp": "^1.1.3",
"react-dnd": "^16.0.0",
"rc-virtual-list": "^3.4.11",
"@ant-design/tools": "^15.1.2",
"jest-puppeteer": "^6.0.0",
"react-resizable": "^3.0.1",
"react-intl": "^6.0.1",
"glob": "^8.0.1",
"eslint-config-airbnb": "^19.0.0",
"@types/react-color": "^3.0.1",
"duplicate-package-checker-webpack-plugin": "^3.0.0",
"lz-string": "^1.4.4",
"react-draggable": "^4.4.3",
"eslint": "^8.0.0",
"jsdom": "^20.0.0",
"@types/react-resizable": "^3.0.0",
"bisheng": "^3.7.0-alpha.4",
"@types/lodash": "^4.14.139",
"jest-axe": "^7.0.0",
"typescript": "~4.9.3",
"bisheng-plugin-toc": "^0.4.4",
"dekko": "^0.2.1",
"lint-staged": "^13.0.3",
"@types/qs": "^6.9.7",
"less-vars-to-js": "^1.3.0",
"react-dnd-html5-backend": "^16.0.0",
"@qixian.cs/github-contributors-list": "^1.0.3",
"eslint-plugin-babel": "^5.3.0",
"prettier": "^2.3.2",
"antd": "4.x",
"webpack-bundle-analyzer": "^4.1.0",
"eslint-plugin-unicorn": "^44.0.0",
"bundlesize2": "^0.0.31",
"theme-switcher": "^1.0.2",
"react-copy-to-clipboard": "^5.0.1",
"open": "^8.0.1",
"enquire-js": "^0.2.1",
"stylelint-config-standard": "^29.0.0",
"jest-environment-jsdom": "^29.0.1",
"mockdate": "^3.0.0",
"remark-preset-lint-recommended": "^6.0.0",
"react-fast-marquee": "^1.2.1",
"@types/gtag.js": "^0.0.12",
"stylelint": "^14.9.0",
"@size-limit/file": "^8.0.0",
"semver": "^7.3.5",
"jest-environment-node": "^29.0.0",
"bisheng-plugin-react": "^1.2.0",
"rome": "^10.0.1",
"inquirer": "^9.1.2",
"stylelint-config-prettier": "^9.0.2",
"@stackblitz/sdk": "^1.3.0",
"fs-extra": "^10.0.0",
"docsearch-react-fork": "^0.0.0-alpha.0",
"simple-git": "^3.0.0",
"eslint-plugin-react-hooks": "^4.1.2",
"react-infinite-scroll-component": "^6.1.0",
"@types/react": "^18.0.0",
"chalk": "^4.0.0",
"@docsearch/css": "^3.0.0",
"xhr-mock": "^2.4.1",
"react-sortable-hoc": "^2.0.0",
"increase-memory-limit": "^1.0.7",
"rimraf": "^3.0.0",
"eslint-config-prettier": "^8.0.0",
"stylelint-declaration-block-no-ignored-properties": "^2.1.0",
"yaml-front-matter": "^4.0.0",
"@ant-design/hitu": "^0.0.0-alpha.13",
"@types/jest-image-snapshot": "^5.1.0",
"remark": "^14.0.1",
"isomorphic-fetch": "^3.0.0",
"prettier-plugin-jsdoc": "^0.4.2",
"immer": "^9.0.1",
"remove-files-webpack-plugin": "1.5.0",
"jquery": "^3.4.1",
"size-limit": "^8.0.0",
"@types/react-dom": "^18.0.0",
"eslint-plugin-compat": "~4.0.0",
"rc-footer": "^0.6.6",
"react-window": "^1.8.5",
"fast-glob": "^3.2.11",
"identity-obj-proxy": "^3.0.0",
"eslint-plugin-import": "^2.21.1",
"intersection-observer": "^0.12.0",
"@types/jest": "^29.0.0",
"cross-env": "^7.0.0",
"@testing-library/jest-dom": "^5.16.3",
"eslint-plugin-markdown": "^3.0.0",
"eslint-plugin-react": "^7.31.8",
"esbuild-loader": "^2.13.1",
"docsearch.js": "^2.6.3",
"@types/react-copy-to-clipboard": "^5.0.0",
"antd-img-crop": "^4.2.8",
"immutability-helper": "^3.0.0",
"@typescript-eslint/eslint-plugin": "^5.40.0",
"jest": "^29.4.1",
"react-github-button": "^0.1.11",
"react-router-dom": "^6.0.2",
"babel-plugin-add-react-displayname": "^0.0.5",
"@testing-library/user-event": "^14.4.2",
"@types/react-highlight-words": "^0.16.4",
"stylelint-config-rational-order": "^0.1.2"
},
"peerDependencies": {
"react-dom": ">=16.9.0",
"react": ">=16.9.0"
},
"name": "antd",
"dist": {
"tarball": "http://10.30.2.18:8081/repository/npm-public/antd/-/antd-4.24.8.tgz",
"shasum": "22f34de6857556868780dfa5fe7b374b0b71b517"
},
"description": "An enterprise-class UI design language and React components implementation",
"main": "lib/index.js",
"_id": "antd@4.24.8",
"contributors": [
"ant"
],
"version": "4.24.8",
"dependencies": {
"@ctrl/tinycolor": "^3.4.0",
"lodash": "^4.17.21",
"rc-dialog": "~9.0.2",
"@ant-design/icons": "^4.7.0",
"rc-field-form": "~1.27.0",
"rc-motion": "^2.6.1",
"rc-resize-observer": "^1.2.0",
"moment": "^2.29.2",
"rc-trigger": "^5.2.10",
"rc-collapse": "~3.4.2",
"rc-switch": "~3.2.0",
"rc-drawer": "~6.1.0",
"rc-progress": "~3.4.1",
"rc-upload": "~4.3.0",
"rc-menu": "~9.8.0",
"rc-rate": "~2.9.0",
"rc-segmented": "~2.1.0",
"rc-slider": "~10.0.0",
"rc-table": "~7.26.0",
"rc-tree": "~5.7.0",
"rc-select": "~14.1.13",
"rc-mentions": "~1.13.1",
"@ant-design/colors": "^6.0.0",
"rc-tree-select": "~5.5.0",
"copy-to-clipboard": "^3.2.0",
"@ant-design/react-slick": "~0.29.1",
"rc-dropdown": "~4.0.0",
"rc-steps": "~5.0.0-alpha.2",
"@babel/runtime": "^7.18.3",
"rc-tooltip": "~5.2.0",
"rc-image": "~5.13.0",
"classnames": "^2.2.6",
"rc-input-number": "~7.3.9",
"rc-cascader": "~3.7.0",
"rc-pagination": "~3.2.0",
"rc-textarea": "~0.4.5",
"rc-picker": "~2.7.0",
"scroll-into-view-if-needed": "^2.2.25",
"rc-util": "^5.22.5",
"rc-input": "~0.1.4",
"rc-notification": "~4.6.0",
"rc-tabs": "~12.5.6",
"rc-checkbox": "~2.3.0"
}
}
},
"name": "antd",
"time": {
"created": "2023-02-23T04:42:02.670Z",
"modified": "2023-02-23T04:42:21.081Z",
"4.24.8": "2023-02-23T04:42:02.670Z"
},
"contributors": [
"ant"
],
"homepage": "https://ant.design"
}
完
原文地址:https://blog.csdn.net/u011039332/article/details/129212726
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_25532.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!