cocos creator的模块系统用的不是标准的common/esm,但实现了common/esm的功能(虽然有些小问题)
1 支持esm和common.js两种形式
// getName.js commonjs形式
function getName() { return 'honghong' } module.exports = getName // getName.js esm形式 function getName() { return 'honghong' } export default getName // test.ts import * as getName from './getName' const {ccclass, property} = cc._decorator; @ccclass export default class NewClass extends cc.Component { @property(cc.Label) label: cc.Label = null; start () { this.label.string = getName() } } 2:ts导入js文件, export default 可能存在问题 只能使用import * as getName from './getName'形式 或者 const getName = require('./getName)形式,否则会报错 为什么呢? getName: [function(t, e, o) {
"use strict";
cc._RF.push(e, "b66a1LXyMVE2Zx7M80Prh6Y", "getName"),
o.__esModule = !0,
o.default = void 0;
o.default = function() {
return "honghong"
},
e.exports = o.default,
cc._RF.pop()
}
可见export default的形式是会被转化为exports.default的形式的
所以import getName from './getName'
getName并不是想要的结果,必须加个default, getName.default
为什么ts导入ts可以,因为ts转js的时候,给转码了
问题来了,为什么ts可以,js 不可以?请对比编译之后的代码,发现他们的生产文件有所不同
为什么ts没问题,因为ts是所谓的强类型,而用require是会报错的
是不是官方的本意 ts文件用es6形式, js用commonjs形式?
标签:cocos,creator,default,getName,ts,js,cc,export,模块 From: https://www.cnblogs.com/honghong87/p/17041357.html