cocos creator模块系统

代码多了,要组织代码的话,就需要使用模块系统了

常见的就两种esm, commonjs

1:cocos creator 中ts支持导入js文件吗?

是支持的,并且支持esm和common.js两种形式, 例子说明

// getName.js esm形式
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() 
    }
}
 
// getName.js esm形式
exports.getName = function() {
    return 'honghong'
}
module.exports = getName 

// getName.js esm形式 
export function getName() { 
    return 'honghong' 
}

// test.ts 
import {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:为什么建议不要用默认导出?
只能使用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默认导出 最后还是会被转化成命名导出。并且名字是关键字default

所以import getName from './getName'

getName并不是想要的结果,必须加个default,  getName.default

为什么ts导入ts可以,因为ts转js的时候,给转码了

问题来了,为什么ts可以,js 不可以?请对比编译之后的代码,发现他们的生产文件有所不同

 为什么ts没问题,因为ts是所谓的强类型,   而用require是会报错的

是不是官方的本意 ts文件用es6形式,    js用commonjs形式? 

建议不要用默认导出, 用命名导出(很有名的开源2d游戏引擎pixi.js也是用的命名导出)

 

基本上都是用ts脚本的,为什么还要了解js脚本?

因为编译出来的代码是js文件,如果你了解此机制的话,就能做些文章了

作者直白点告诉你,反编很有用

 

总结: cocos creator js脚本 commonjs和es6都支持,

         ts脚本只支持es6

        cocos creator导出的是命名导出,如果是export default 则会弄成 exports['default']

        commonjs不是标准,es6才是标准

posted @ 2023-01-10 22:46  wanhong  阅读(189)  评论(0编辑  收藏  举报