
总结下已知的问题和进展: 1. openEuler 的建仓衰退机制对包依赖关系不稳定的语言不友好. 王凯这次讲的 nodejs 就是例子。 2. 这些语言包的版本选择基本上都是和最终依赖他们的软件具体版本强绑定。所以应用多了,应用的版本多了,需要足够强的多版本机制支持。当前多版本机制过于复杂。 3. 这些包很多连版本发布的过程都没有,没有版本号,只能拿 commit id 来指代,也谈不上升级,回退,兼容等等概念。 4. 纯源码的包怎么做CI,怎么自检,怎么做质量保证。现在只能依赖对最终使用这些包的应用做黑盒测试来反推。 周一在 基础设施 SIG 会议上讨论,基于 https://gitee.com/openeuler/TC/blob/master/oEEP/oEEP-0023%20%E5%A4%A7%E5%9E%... 会做相应的尝试。 我觉得基本思路是以应用为中心,把所依赖的语言包创建衰退直接下放给应用所在的 sig。这个直接针对问题1。 问题2 在 rpm 范围内几乎无解,需要 epkg 这样推到重来的方案。但是对 golang, rust 这些只有 -devel 包的语言来说,因为不会在安装时互相干扰,就还不会特别难受。 问题3和4 的本质就是让这些包依附于应用。 rust 之前经纬也提过,可以一并再讨论下。 另外也抄上曹志代表基础设施 SIG。 发件人: Funda Wang <fundawang@yeah.net> 发送时间: 2025年7月17日 11:49 收件人: dev@openeuler.org 主题: [Dev] Re: nodejs模块包衰退收集意见 rust 和 golang 是一样的。 现在 golang 的 mod 和 rust 的 crates,绝大多数分发的是源代码。现在openEuler里 golang 和 rust 的包,如果需要第三方库的话基本都是自己把 vendor 上传到制品仓里。也就是说这是一个静态的第三方依赖库,既不方便维护,也没有办法跟踪安全漏洞。这个问题云原生SIG曾经提过,还和基础设施 SIG 专题开会研究,没有结论。核心问题是谁也不想给别人做嫁衣。 在 2025-07-16 17:54:17,"王凯" <13474090681@163.com<mailto:13474090681@163.com>> 写道: 这个怎么说,golang不太清楚,rust还有哪些需要改善的,我带回去研究下 在 2025-07-16 15:07:46,"Funda Wang" <fundawang@yeah.net<mailto:fundawang@yeah.net>> 写道: 与自带包管理器的编程语言互动,一直是 openEuler 的短板。当前 golang python rust 都有类似的问题,尤其 golang 和 rust 问题非常严重。 在 2025-07-16 14:57:16,"王凯" <13474090681@163.com<mailto:13474090681@163.com>> 写道: 背景: nodejs模块间耦合性高,升级版本跨度大、变化多,无法进行维护,建议衰退大部分nodejs模块包,后续用户需要使用,可以用npm命令安装,衰退影响不大。 https://gitee.com/openeuler/community/blob/master/sig/sig-nodejs/sig-info.ya... 从以下三个点分析维护 1.工具化批量升级具体困难 举以下3个例子 1)node-semver升级7.7.2 根据 https://github.com/npm/node-semver/blob/v7.7.2/package.json 中定义的依赖 "devDependencies": { "@npmcli/eslint-config": "^5.0.0", "@npmcli/template-oss": "4.24.4", "benchmark": "^2.1.4", "tap": "^16.0.0" }, 需要引入 @npmcli/eslint-config、@npmcli/template-oss、benchmark 模块,还需升级nodejs-tap到16.0.0版本 当前nodejs-tap版本为 0.7.1,升级16.0.0 根据 https://github.com/tapjs/tapjs/blob/v16.0.0/package.json 中定义的依赖 需要引入10+依赖包,升级10+包,工作量过大,且版本演进很快,可能哪一天就衰退了,不利于维护 2)nodejs-abbrev 升级3.0.1 根据 https://github.com/npm/abbrev-js/blob/v3.0.1/package.json 中定义的依赖 "devDependencies": { "@npmcli/eslint-config": "^5.0.0", "@npmcli/template-oss": "4.24.3", "tap": "^16.3.0" }, 升级需要 nodejs-tap升级16.3.0,引入 @npmcli/eslint-config、@npmcli/template-oss 3)nodejs-acorn 升级8.15.0 根据 https://github.com/acornjs/acorn/blob/8.15.0/package.json 中定义的依赖 "devDependencies": { "@rollup/plugin-buble": "^1.0.2", "@unicode/unicode-16.0.0": "^1.6.0", "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.30.0", "eslint-plugin-n": "^16.6.2", "rollup": "^3.29.4", "test262": "git+https://github.com/tc39/test262.git#9b127c190cd418b2451c556784aae3d0ac7e9bcf", "test262-parser-runner": "^0.5.0" } 升级需要引入@rollup/plugin-buble、@unicode/unicode-16.0.0、eslint、eslint-config-standard、eslint-plugin-import、eslint-plugin-n、test262、test262-parser-runner<mailto:升级需要引入@rollup/plugin-buble、@unicode/unicode-16.0.0、eslint、eslint-config-standard、eslint-plugin-import、eslint-plugin-n、test262、test262-parser-runner> 还需要升级 rollup 到 3.29.4版本 根据以上3个包的升级情况,情况较复杂,工具批量升级没有好的解决方案 1)无法解决引入依赖包问题,目前在版本的nodejs模块包341个软件包,不是最新版本的存在200+,全部升级可能至少得再引入200+软件包及其依赖包 2)软件包兼容问题,nodejs主包大版本升级后,可能导致nodejs模块包构建失败,上游未适配时需要人工处理 2.使用npm安装情况下,无法实现自维护,无网络情况下无法获取这些软件对服务器场景整体影响 对服务器影响不大,仅个别包对nodejs模块进行依赖,这些无法解耦的包暂不衰退 nodejs模块主要使用场景为前端网页,一般都会自行打包nodejs模块进行安装,不会安装nodejs模块包来进行安装,影响可控 3. 第二项的延伸,细化分析编译和构建依赖,对其他软件的影响 见附件表格,排查仅有6个无法衰退,其余的衰退无影响 执行计划,根据影响范围,按sig沟通和社区公示,倒推落地版本 1)sig-nodejs 内部讨论 – 已进行 2)上TC评审 3)邮件公示一个月,无异议进行下一步 4)提release PR对nodejs模块包进行剔除,将衰退的包放入recycle sig 目前nodejs模块包均在everything,如无法从版本中移除,建议先全部移动到EPOL中降级维护,仅保证单包正常构建安装 衰退版本:在25.09衰退测试,26.03-LTS移除 衰退软件包等级:目前软件包等级均为L4 CVE影响:LTS版本暂不衰退,有CVE继续处理 目前已上TC评审,建议先发邮件收集意见 以下6个包不衰退 pkg 原因 nodejs-requirejs 被kylin-user-guide 安装依赖 nodejs-rollup 被riscv将引入的 electron 依赖 nodejs-yarn 被 sig-openstack 等包依赖 nodejs-packaging 被nodejs-yarn等模块依赖 js-jquery 被gradle依赖 uglify-js 被marked依赖 需衰退软件包列表,目前涉及nodejs模块包及其依赖包342个,详细见附件 pkg sig nodejs-tap sig-nodejs nodejs-abbrev sig-nodejs nodejs-acorn sig-nodejs nodejs-ansi sig-nodejs nodejs-ansi-font sig-nodejs nodejs-ansi-regex sig-nodejs nodejs-ansi-styles sig-nodejs nodejs-are-we-there-yet sig-nodejs nodejs-argparse sig-nodejs nodejs-array-differ sig-nodejs nodejs-array-index sig-nodejs nodejs-array-union sig-nodejs nodejs-array-uniq sig-nodejs nodejs-arrify sig-nodejs nodejs-asap sig-nodejs nodejs-asn1 sig-nodejs nodejs-assert-plus sig-nodejs nodejs-assertion-error sig-nodejs nodejs-async sig-nodejs nodejs-aws-sign2 sig-nodejs nodejs-balanced-match sig-nodejs nodejs-better-assert sig-nodejs nodejs-bindings sig-nodejs nodejs-bl sig-nodejs nodejs-block-stream sig-nodejs nodejs-bluebird sig-nodejs nodejs-boom sig-nodejs nodejs-brace-expansion sig-nodejs nodejs-buffer-equal sig-nodejs nodejs-builtin-modules sig-nodejs nodejs-bunker sig-nodejs nodejs-burrito sig-nodejs nodejs-bytes sig-nodejs nodejs-caller-callsite sig-nodejs nodejs-caller-path sig-nodejs nodejs-callsite sig-nodejs nodejs-callsites sig-nodejs nodejs-caseless sig-nodejs nodejs-chai sig-nodejs nodejs-chalk sig-nodejs nodejs-character-parser sig-nodejs nodejs-charm sig-nodejs nodejs-cjson sig-nodejs nodejs-clean-css sig-nodejs nodejs-cli-color sig-nodejs nodejs-clone sig-nodejs nodejs-closure-compiler sig-nodejs nodejs-colors sig-nodejs nodejs-combined-stream sig-nodejs nodejs-commander sig-nodejs nodejs-commonmark sig-nodejs nodejs-concat-map sig-nodejs nodejs-concat-stream sig-nodejs nodejs-console-dot-log sig-nodejs nodejs-constantinople sig-nodejs nodejs-core-util-is sig-nodejs nodejs-cryptiles sig-nodejs nodejs-css sig-nodejs nodejs-css-parse sig-nodejs nodejs-css-stringify sig-nodejs nodejs-ctype sig-nodejs nodejs-d sig-nodejs nodejs-dateformat sig-nodejs nodejs-debug sig-nodejs nodejs-deep-eql sig-nodejs nodejs-deep-equal sig-nodejs nodejs-deep-is sig-nodejs nodejs-defence sig-nodejs nodejs-defence-cli sig-nodejs nodejs-define-properties sig-nodejs nodejs-defined sig-nodejs nodejs-delayed-stream sig-nodejs nodejs-delegates sig-nodejs nodejs-diff sig-nodejs nodejs-difflet sig-nodejs nodejs-difflib sig-nodejs nodejs-docopt sig-nodejs nodejs-dreamopt sig-nodejs nodejs-duplexer sig-nodejs nodejs-ebnf-parser sig-nodejs nodejs-ejs sig-nodejs nodejs-end-of-stream sig-nodejs nodejs-entities sig-nodejs nodejs-es-abstract sig-nodejs nodejs-es-to-primitive sig-nodejs nodejs-es5-ext sig-nodejs nodejs-es6-iterator sig-nodejs nodejs-es6-symbol sig-nodejs nodejs-es6-weak-map sig-nodejs nodejs-escape-string-regexp sig-nodejs nodejs-escodegen sig-nodejs nodejs-esprima sig-nodejs nodejs-estraverse sig-nodejs nodejs-esutils sig-nodejs nodejs-event-emitter sig-nodejs nodejs-eventemitter2 sig-nodejs nodejs-events-to-array sig-nodejs nodejs-exit sig-nodejs nodejs-expect-dot-js sig-nodejs nodejs-extend sig-nodejs nodejs-eyes sig-nodejs nodejs-fast-levenshtein sig-nodejs nodejs-faye-websocket sig-nodejs nodejs-figures sig-nodejs nodejs-fileset sig-nodejs nodejs-fill-keys sig-nodejs nodejs-find-up sig-nodejs nodejs-findup-sync sig-nodejs nodejs-for-each sig-nodejs nodejs-foreach sig-nodejs nodejs-forever-agent sig-nodejs nodejs-form-data sig-nodejs nodejs-formatio sig-nodejs nodejs-from sig-nodejs nodejs-fstream sig-nodejs nodejs-function-bind sig-nodejs nodejs-gauge sig-nodejs nodejs-gaze sig-nodejs nodejs-generate-function sig-nodejs nodejs-generate-object-property sig-nodejs nodejs-getobject sig-nodejs nodejs-github-url-from-git sig-nodejs nodejs-glob sig-nodejs nodejs-globule sig-nodejs nodejs-graceful-fs sig-nodejs nodejs-graceful-readlink sig-nodejs nodejs-growl sig-nodejs nodejs-grunt sig-nodejs nodejs-grunt-cli sig-nodejs nodejs-grunt-contrib-clean sig-nodejs nodejs-grunt-contrib-internal sig-nodejs nodejs-grunt-contrib-nodeunit sig-nodejs nodejs-grunt-contrib-uglify sig-nodejs nodejs-grunt-known-options sig-nodejs nodejs-grunt-legacy-log sig-nodejs nodejs-grunt-legacy-log-utils sig-nodejs nodejs-grunt-legacy-util sig-nodejs nodejs-gzip-size sig-nodejs nodejs-handlebars sig-nodejs nodejs-har-validator sig-nodejs nodejs-has sig-nodejs nodejs-has-ansi sig-nodejs nodejs-has-color sig-nodejs nodejs-has-flag sig-nodejs nodejs-has-symbols sig-nodejs nodejs-has-unicode sig-nodejs nodejs-hash_file sig-nodejs nodejs-hashish sig-nodejs nodejs-hawk sig-nodejs nodejs-heap sig-nodejs nodejs-hoek sig-nodejs nodejs-hooker sig-nodejs nodejs-hosted-git-info sig-nodejs nodejs-http-signature sig-nodejs nodejs-iconv sig-nodejs nodejs-iconv-lite sig-nodejs nodejs-image-size sig-nodejs nodejs-inflight sig-nodejs nodejs-inherits sig-nodejs nodejs-inherits1 sig-nodejs nodejs-interpret sig-nodejs nodejs-is sig-nodejs nodejs-is-builtin-module sig-nodejs nodejs-is-callable sig-nodejs nodejs-is-date-object sig-nodejs nodejs-is-function sig-nodejs nodejs-is-my-json-valid sig-nodejs nodejs-is-object sig-nodejs nodejs-is-property sig-nodejs nodejs-is-regex sig-nodejs nodejs-is-symbol sig-nodejs nodejs-is-typedarray sig-nodejs nodejs-isarray sig-nodejs nodejs-isexe sig-nodejs nodejs-isstream sig-nodejs nodejs-istanbul sig-nodejs nodejs-jade sig-nodejs nodejs-jison sig-nodejs nodejs-jison-lex sig-nodejs nodejs-jju sig-nodejs nodejs-js-yaml sig-nodejs nodejs-json-diff sig-nodejs nodejs-json-parse-helpfulerror sig-nodejs nodejs-json-stringify-safe sig-nodejs nodejs-jsonify sig-nodejs nodejs-jsonpointer sig-nodejs nodejs-less sig-nodejs nodejs-less-plugin-clean-css sig-nodejs nodejs-levn sig-nodejs nodejs-lex-parser sig-nodejs nodejs-load-grunt-tasks sig-nodejs nodejs-locate-path sig-nodejs nodejs-lolex sig-nodejs nodejs-lru-queue sig-nodejs nodejs-make-arrow-function sig-nodejs nodejs-make-generator-function sig-nodejs nodejs-maxmin sig-nodejs nodejs-mdurl sig-nodejs nodejs-memoizee sig-nodejs nodejs-merge-descriptors sig-nodejs nodejs-mime sig-nodejs nodejs-mime-db sig-nodejs nodejs-mime-types sig-nodejs nodejs-minimatch sig-nodejs nodejs-minimist sig-nodejs nodejs-mkdirp sig-nodejs nodejs-mock-fs sig-nodejs nodejs-module-not-found-error sig-nodejs nodejs-monocle sig-nodejs nodejs-ms sig-nodejs nodejs-multimatch sig-nodejs nodejs-nan sig-nodejs nodejs-nan0 sig-nodejs nodejs-nan1 sig-nodejs nodejs-next-tick sig-nodejs nodejs-node-uuid sig-nodejs nodejs-nomnom sig-nodejs nodejs-nopt sig-nodejs nodejs-noptify sig-nodejs nodejs-normalize-package-data sig-nodejs nodejs-npmlog sig-nodejs nodejs-oauth-sign sig-nodejs nodejs-object-assign sig-nodejs nodejs-object-dot-assign sig-nodejs nodejs-object-inspect sig-nodejs nodejs-object-is sig-nodejs nodejs-object-keys sig-nodejs nodejs-once sig-nodejs nodejs-optimist sig-nodejs nodejs-optionator sig-nodejs nodejs-os-homedir sig-nodejs nodejs-os-tmpdir sig-nodejs nodejs-osenv sig-nodejs nodejs-p-limit sig-nodejs nodejs-p-locate sig-nodejs nodejs-package sig-nodejs nodejs-paperboy sig-nodejs nodejs-path-array sig-nodejs nodejs-path-exists sig-nodejs nodejs-path-is-absolute sig-nodejs nodejs-path-parse sig-nodejs nodejs-pinkie sig-nodejs nodejs-pinkie-promise sig-nodejs nodejs-pkg-up sig-nodejs nodejs-prelude-ls sig-nodejs nodejs-pretty-bytes sig-nodejs nodejs-process-nextick-args sig-nodejs nodejs-promise sig-nodejs nodejs-promises-aplus-tests sig-nodejs nodejs-proxyquire sig-nodejs nodejs-qs sig-nodejs nodejs-raw-body sig-nodejs nodejs-read-package-json sig-nodejs nodejs-readable-stream sig-nodejs nodejs-readdirp sig-nodejs nodejs-rechoir sig-nodejs nodejs-replace-require-self sig-nodejs nodejs-request sig-nodejs nodejs-require-directory sig-nodejs nodejs-require-inject sig-nodejs nodejs-require-uncached sig-nodejs nodejs-resolve sig-nodejs nodejs-resolve-from sig-nodejs nodejs-resolve-pkg sig-nodejs nodejs-resumer sig-nodejs nodejs-rimraf sig-nodejs nodejs-runforcover sig-nodejs nodejs-safe-buffer sig-nodejs nodejs-samsam sig-nodejs nodejs-semver sig-nodejs nodejs-set-immediate-shim sig-nodejs nodejs-shelljs sig-nodejs nodejs-should sig-nodejs nodejs-should-equal sig-nodejs nodejs-should-format sig-nodejs nodejs-should-type sig-nodejs nodejs-simple-assert sig-nodejs nodejs-sinon sig-nodejs nodejs-slide sig-nodejs nodejs-sntp sig-nodejs nodejs-source-map sig-nodejs nodejs-source-map-support sig-nodejs nodejs-spdx-correct sig-nodejs nodejs-spdx-exceptions sig-nodejs nodejs-spdx-expression-parse sig-nodejs nodejs-spdx-license-ids sig-nodejs nodejs-sprintf-js sig-nodejs nodejs-stream-replace sig-nodejs nodejs-string sig-nodejs nodejs-string-dot-prototype-dot-repeat sig-nodejs nodejs-string-dot-prototype-dot-trim sig-nodejs nodejs-string_decoder sig-nodejs nodejs-stringstream sig-nodejs nodejs-strip-ansi sig-nodejs nodejs-strip-json-comments sig-nodejs nodejs-supports-color sig-nodejs nodejs-tap-parser sig-nodejs nodejs-tape sig-nodejs nodejs-tar sig-nodejs nodejs-temporary sig-nodejs nodejs-test sig-nodejs nodejs-through sig-nodejs nodejs-through2 sig-nodejs nodejs-timers-ext sig-nodejs nodejs-tiny-lr-fork sig-nodejs nodejs-tough-cookie sig-nodejs nodejs-transformers sig-nodejs nodejs-traverse sig-nodejs nodejs-tunnel-agent sig-nodejs nodejs-type-check sig-nodejs nodejs-type-detect sig-nodejs nodejs-underscore sig-nodejs nodejs-unpipe sig-nodejs nodejs-uri-path sig-nodejs nodejs-util sig-nodejs nodejs-util-deprecate sig-nodejs nodejs-validate-npm-package-license sig-nodejs nodejs-vows sig-nodejs nodejs-websocket-driver sig-nodejs nodejs-which sig-nodejs nodejs-window-size sig-nodejs nodejs-with sig-nodejs nodejs-wordwrap sig-nodejs nodejs-wrappy sig-nodejs nodejs-xtend sig-nodejs nodejs-yamlish sig-nodejs nodejs-yargs sig-nodejs nodeunit sig-nodejs node-gyp sig-nodejs nodejs-flot sig-nodejs nodejs-jsonselect sig-nodejs nodejs-underscore-dot-string sig-nodejs js-sizzle sig-nodejs uglify-js1 sig-nodejs closure-compiler sig-nodejs lodash sig-nodejs mocha dev-utils coffee-script Application rubygem-coffee-script-source sig-ruby rubygem-coffee-script sig-ruby rubygem-uglifier sig-ruby js-excanvas dev-utils