分享个3.5能用的rxjs

3.x的模块不知道是怎么了,看文档搞了一堆规范,最后10个npm包8个用不了。
把那些umd的单文件拷贝出来倒是能运行,类型又没了。

尤其是Rx这种库没有类型咋写,既然官方都提倡TS了,那就把npm这块搞好啊,直接引入运行不了,拷出来没有类型跟盲写一样。
我刚用tsdx,把最新版rxjs的代码拷进去,直接打了个esm包,然后给按照ccc官方要求给package.json增加"type": "module",现在能在3.5运行了,也有类型。但是我这个不保证和rxjs最新版同步。
而且听说官方也要改模块引入了,这可以当做最近的过渡方案。或者你们有哪些库用不了也可以试试像上面那样打包。
不过,让开发者自己打包不现实!ccc官方应该放弃自己那些打包规则了!跟着主流走!

yarn add ccc-rxjs
1赞

我总共就装了5个包:zustand、lodash、quadtree-ts、rxjs、immer
zustand:默认能用
lodash:用不了,换成了esm版本 lodash-es
quadtree-ts:用不了,源代码不是很大直接拷贝出来了
rxjs:用不了,重新打的包
immer:用不了,拷贝出来单独umd格式模块

基本每个模块都要去琢磨怎么才能在3.x里正常用,这模块真的有问题,不是我唠叨

rxjs 实际上是容易解决的.

1 - 修改 Project Settings > Scripting > Export Conditions 为:

browser,node

2 - 将 “真实的” rxjs 化作 npm 别名 x_rxjs_DONT_USE_THIS,然后创建一个目录伪装成 rxjs,重新导出用到的值和类型。

npm i x_rxjs_DONT_USE_THIS@npm:rxjs --save

截屏2022-07-02 20.50.01

3 - import-map.json:

{
  "imports": {
    "rxjs": "./assets/src/rxjs/index.mjs",
    "rxjs/": "./assets/src/rxjs/"
  }
}

4 - 然后就可以正常使用了

import {Observable} from "rxjs";

真容易啊。

1赞

immer 我这边试了可以直接使用呀。我的测试代码:

import produce from 'immer';
console.log(produce); // 一个函数,我不了解这个库

如果你那边还不行,可以尝试下升级到 3.5.2。我们有处理一个 npm 使用上的问题。

quadtree-ts 这个包我试了下,以这样的方式可用:

import quadtree from 'quadtree-ts';
const { QuadTree  } = quadtree;
console.log(QuadTree); // 一个函数,我不了解这个库

就这个包而言,我们清除开发者的痛处。因为在 vscode 或者其它 IDE 给出的提示是这样的:

import { QuadTree } from 'quatree-ts';

我们决定在后续版本优化这种情况。敬请期待。

对于使用的不畅我们感到抱歉。要说明的是,我们的确是想要努力“跟着主流走”。不过我们眼中的主流是面向未来的那些规则(package exports 字段/import map/要求扩展名/ESM 模块),而非大家抱怨的很多规则(browser 字段/module 字段/可以省略扩展名甚至是 index.js/Common JS 模块)。那些面向未来的规则是 Node.js 指定的,后面那些规则是各种各样的打包工具(browserify、webpack)制定的。

不过在后续版本,我们计划放开某些规则:

  • 我们会启用对 CommonJS 模块的导出猜测功能。

    也就是说,开发者可以用 import { X } from '一个 CommonJS 模块';。我们之前禁用了这个功能是考虑到这个功能的不确定性。

  • 我们会解析 browser 字段。

    这会让某些原本需要 import '某个包/dist/xxx.js' 的用法变为 import '某个包';

    进程追踪: Supports browser field in package.json · Issue #11367 · cocos/cocos-engine (github.com)

1赞

@shrinktofit 我使用了你的方式回报错:Error: Unexpected export statement in CJS module。
版本3.8.2。
我很好奇该怎么使用npm的库。希望能帮个忙,怎么把项目传给你看看,因为包体过大上传不了,希望得到你的帮助

@jare cocos3.x 应该给怎么导入npm包。这个有规范吗?文档给的内容是直接使用npm install xxx --save。但是用不了,比如我的rxjs包导入,即使使用了很多偏方还是不行,是不是3.5.x和3.8.x又有不一样的操作