18 关于 npm 安装依赖的时候 “integrity checksum failed when using sha512“

前言

安装 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:\ProgramFiles\nodejs\node_modules\npm\node_modules\ssri\index.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:\WebstormWorkStations\lowcode-platform\demo-general

问题的分析

从上面日志可以看出 期望的 摘要为 “ufylF1APBc4d1g”, 但是实际上根据 从 nexus 拉取的包计算出来的摘要为 “wrNy2Hi27uM3948okG3n2GwzQKBFUn1Qn5mn2I”

首先 从 nexus 上面下载一下 antd-4.24.8.tgz 文件, 然后 计算一下它的 sha512 摘要

然后对比一下 nexus 上面计算的摘要, 发现 二者是能够对上的, 但是 npm 却期望的是 “ufylF1APBc4d1g”, 那么这个摘要又是从哪里来的呢? 

接下来是一系列 npm 相关代码的跟踪 

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 

uri 的计算方式如下 

所以 大致推演一下问题 

之前谁上传了 版本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 ?

java 相关 api 很多, 不多赘述 

通过 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": "[email protected]",
      "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 [email protected]:ant-design/4x.ant.design.git -b gh-pages",
        "deploy:china-mirror": "git checkout gh-pages && git pull origin gh-pages && git push [email protected]: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": "[email protected]",
      "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"
}

完 

猜你喜欢

转载自blog.csdn.net/u011039332/article/details/129212726