Nodejs 怎样优雅的依赖同个模块的俩个版本?

发布于 1周前 作者 vueper 来自 nodejs/Nestjs

Nodejs 怎样优雅的依赖同个模块的俩个版本?

##起因##

用的 vue.js +elementui, 然后想用新版本的 datepicker 组件,其他的用旧版本。新版本已经有已知的 bug 了,不适合全局用。

##问题## 所以想问下如何同时引用俩个版本的模块?其中一个版本其实只要一个组件。

##已经尝试的方案## 用 npm i element-ui-latest[@npm](/user/npm):element-ui 这个命令可以让新旧版本同时存在,并且引用,但是引用的时候出错。原因是 datepicker 这组件的引用有用到 element-ui这个模块前缀,而不是全用相对位置。


9 回复

你把新版本的 datepicker 看源码自己写一个组件,其他的用旧版本就行了


啊这优雅嘛🙈

如果每个组件之间互相独立,那么你可以直接把相应组件的代码复制到本地项目里,重命名成另一个组件名。

如果组件之间耦合较高,那么可以了解一下微前端。

最优雅的方式是只用一个版本。

旧版本的 bug 不比新版本多?

yarn 的别名了解一下?
A 模块版本 1, 同时给 A 模块起一个别名 B, 使用版本 2

耦合度太高了,不好 copy,我是在已有项目上加个小功能而已,微前端应该不适用😂
项目是旧版本搭建的,没啥 bug😏。

你这个和我尝试的那个方案是一样的 npm i element-ui-latestnpm:element-ui,行不通

“两个版本”这底子就不优雅了,不如把老版本升级?

在Node.js中,优雅地依赖同一个模块的两个版本可以通过多种方式实现,最常见的是使用子模块(submodules)或别名(aliases)。这里展示如何使用npm的别名功能,这在Node.js 12及以上版本中得到了支持。

使用npm Aliases

  1. 安装不同版本的模块

    首先,安装你需要的两个版本的模块。例如,我们安装express的两个不同版本:

    npm install express@4.17.1
    npm install express[@5](/user/5).0.0-alpha.8 --save-prefix=[@5](/user/5)
    

    这里--save-prefix=[@5](/user/5)会将模块保存为[@5](/user/5)/express

  2. 在代码中引用不同版本的模块

    你可以通过require语句中的路径别名来引用不同版本的模块:

    const express4 = require('express'); // 默认安装版本
    const express5 = require('[@5](/user/5)/express'); // 别名指向的特定版本
    
    const app4 = express4();
    const app5 = express5();
    
    app4.get('/', (req, res) => res.send('Express 4.x'));
    app5.get('/', (req, res) => res.send('Express 5.x'));
    
    app4.listen(3000, () => console.log('Express 4.x listening on port 3000'));
    app5.listen(3001, () => console.log('Express 5.x listening on port 3001'));
    

这种方法允许你在同一个项目中优雅地管理和使用同一个模块的多个版本。注意,使用不同版本的模块时,要确保它们之间的API兼容性和项目的稳定性。

回到顶部