uni-app uniapp中,两个node_modules中的三方类库使用同一个另一个三方类库的变量,在小程序上为不同对象,而h5端为相同对象

9avjhtql  于 3个月前  发布在  uni-app
关注(0)|答案(1)|浏览(55)

不是说 esm是 引用变量么, 为什么在小程序上同一个模块导出的是两个不同的对象,就因为使用的项目不同?这两个项目都依赖了另一个项目,于是各新建了一个实体?

而在h5端,两个node_modules中的三方类库项目引用同一个第三方类库中到处的内容,是共享对象的

看小程序源码里面创建了两个这个对象

let SocialuniPluginsModule$1 = class SocialuniPluginsModule2 {
  constructor() {
    __publicField(this, "_router", null);
    __publicField(this, "_route", null);
    __publicField(this, "uid", UUIDUtil.getUUID());
    __publicField(this, "socialuniPlugins", []);
    console.trace("创建了socialplus");
  }
  get route() {
    return this._route;
  }
  setRoute(value) {
    this._route = value;
  }
  get router() {
    return this._router;
  }
  setRouter(value) {
    this._router = value;
  }
  init() {
    this.socialuniPlugins = [];
  }
  addPlugin(...socialuniPlugins) {
    this.socialuniPlugins.push(...socialuniPlugins);
  }
  get plugins() {
    return this.socialuniPlugins;
  }
};
const socialuniPluginsModule$1 = reactive(new SocialuniPluginsModule$1());
class SocialuniPluginsModule {
  constructor() {
    this._router = null;
    this._route = null;
    this.uid = UUIDUtil.getUUID();
    this.socialuniPlugins = [];
    console.trace("创建了socialplus");
  }
  get route() {
    return this._route;
  }
  setRoute(value) {
    this._route = value;
  }
  get router() {
    return this._router;
  }
  setRouter(value) {
    this._router = value;
  }
  init() {
    this.socialuniPlugins = [];
  }
  addPlugin(...socialuniPlugins) {
    this.socialuniPlugins.push(...socialuniPlugins);
  }
  get plugins() {
    return this.socialuniPlugins;
  }
}
const socialuniPluginsModule = reactive(new SocialuniPluginsModule());

源码

编译后

tgabmvqs

tgabmvqs1#

项目中引用了一个库,三方库中也引用了这个库,

程序中会存在两个版本 , 一个是node_modules中的对象,一个是程序中引用的对象

导致的

把程序中对这个库的引用删除,解决了问题, 但是感觉这是打包逻辑有问题

h5端就没有这个问题, node_modules中和项目中引用的同一个库,会使用同一个引用,而在微信小程序中会分别使用两个引用

相关问题