puerts icon indicating copy to clipboard operation
puerts copied to clipboard

[Unity] 1.4.0.rc esm模块无法调用cjs模块

Open dunadain opened this issue 3 years ago • 4 comments

尝试在mts里调用一个cjs模块,直接报错: // C.cjs class C { say() { console.log('hii world'); } }

module.exports = C;

...... 在另外一个文件里调用 // A.mts import { default as C } from './C.cjs'; let c = new C(); c.say();

用ExecuteModule 执行A.mts文件,unity里报错 Exception: ../dist/A.mjs:1: SyntaxError: The requested module './C.cjs' does not provide an export named 'default'

俩参数都已经设置 image

也无法正常使用protobuf

dunadain avatar Sep 24 '22 03:09 dunadain

mjs引入cjs能否使用require引入?比如这样

A.mts

const C = require('./C.cjs')
let c = new C();

zombieyang avatar Sep 24 '22 07:09 zombieyang

mjs引入cjs能否使用require引入?比如这样

A.mts

const C = require('./C.cjs')
let c = new C();

这里的require是基于全局路径的require,因此路径的相对关系并不准确,但可以临时解决你的问题。

如果要做到像Node.js一样,理想解决方案应该是 #1003 那样。我处理完 #1003 后再补充一个Sample到 https://github.com/puerts/puerts-commonjs

zombieyang avatar Sep 24 '22 07:09 zombieyang

我下了puerts和commonjs俩个packages,是还需要设置什么东西么? 设置为commonjs,运行会报错: Exception: B.js:2: ReferenceError: exports is not defined

导出就俩个文件: A.js Object.defineProperty(exports, "__esModule", { value: true }); exports.A = void 0; class A { speak() { console.log('hiiii'); } } exports.A = A;

B.js Object.defineProperty(exports, "__esModule", { value: true }); const A_1 = require("./A"); const a = new A_1.A(); a.speak();

dunadain avatar Sep 24 '22 11:09 dunadain

哦 知道了。之前一直通过executemodule来执行commonjs。 _jsEnv.ExecuteModule("B.js") 现在好像不支持了....只能用Eval("require('B.js')");

dunadain avatar Sep 24 '22 11:09 dunadain