​Cocos Creator 3.0 里如何玩转 npm 海量资源

本文介绍了Cocos Creator 3.0如何利用npm管理和使用模块,特别是如何处理CommonJS和ES6模块的交互。内容包括模块规范、Cocos Creator 3.0的模块格式、模块鉴别和使用,以及protobufjs和lodash-es等包的使用案例。
摘要由CSDN通过智能技术生成

Cocos Creator 3.0 已全面支持 TypeScript 作为默认语言,不论是引擎提供的功能还是用户提供的脚本,所有代码都以模块的形式组织。

模块格式支持并推荐使用 ECMAScript(以下简称 ESM),也就是项目资源目录下以 .ts 作为后缀的文件。例如 assets/scripts/foo.ts。

但这不代表不支持 JavaScript 语言,毕竟 TypeScript 是 JavaScript 的超集并且 TypeScript 紧紧依赖 JavaScript。

因此,针对外部模块(例如:npm 模块)的使用,Cocos Creator 3.0 也在某种限度上支持了 CommonJS 模块格式(以下简称 CJS 模块格式)。

因此,清晰的了解 Cocos Creator 对模块格式的支持,可以更加方便地玩转 npm 里的海量资源。

01

模块

模块规范

目前主流的模块规范分别有:

  • UMD

  • CommonJS

  • ES6 module

在这里重点说一下与本文有关的 CommonJS 和 ES6 module。

CommonJS 模块规范

Node.js 环境所使用的模块系统就是基于 CommonJS 规范实现的,现在所说的 CommonJS 规范也大多是指 Node.js 的模块系统。

模块导出

使用的关键字 exportsmodule.exports

// foo.js

// 单独导出
module.exports.a = 10;
module.exports.b = function(){};
exports.c = 20;

// 整体导出
module.exports = { a: 10, b: funtion(){}, c: 20 };

// exports 与 module.exports都指向同一个地址,但是最终返回的是 module.exports
exports.a = 10;
module.exports = { b: function(){} };

// exports 不能单独导出,否则会失去和 module.exports 的关联性
exports = { a: 10, b: funtion(){}, c: 20 };
模块导入

使用的关键字 import

const foo = require('./foo.js')

接下来,了解一下模块导入(require)规则,假设文件目录为 src/project/index.js。

  1. 相对路径开头(假设此处要查找的模块是 moduleA)

    在没有指定后缀名的情况下,先去寻找同级目录 src/project 是否有  moduleA 文件。同级目录没有 moduleA 文件,则会去找同级 moduleA 目录 src/project/moduleA

  • 判断 src/project/moduleA 目录下是否有 package.json 文件,如果有,返回 main 字段定义的文件,如果没有 main 字段,则尝试返回以下文件。

  • src/project/moduleA/index.js

  • src/project/moduleA/index.json

  • src/project/moduleA/index.node

绝对路径跟 1 同理

react 没有路径开头

没有路径开头则视为导入一个包。优先判断 moduleA 是否是一个核心模块,如 fspath。否则,会从当前文件的同级目录 node_modules 中寻找。寻找规则与 1 同理, src/project/node_modules 路径下以查找 moduleA.js 为例,moduleA.js -> moduleA.json -> moduleA.node -> moduleA 目录 -> moduleA 下的 package.json main -> index.js -> ...。如果没找到,继续向父目录的 node_modules 中找。

ES6 模块规范
模块导出

使用的关键字 export

foo.js

// 导出单个
export const a = 10;
export const b = function(){};

// 导出列表
export { a, b }

// 重命名导出
export { a as ma, b as mb, …, };

// 解构导出并重命名
export const { a, b: bar } = o;

// 导出模块合集
export * from 'export-name'; // 不能在当前模块(export-name)中使用。
export { a } from 'export-name' // 不能在当前模块(export-name)中使用。

// 默认导出
export default expression; // 一个模块只能有一个默认导出
模块导入
// 导入模块合集
import { a, b } from "module-name";
import * as moduleA from "module-name"
Cocos Creator中,如果不需要通过服务器直接连接本地MySQL数据库,你可以选择使用NoSQL数据库如CocosDB,或者使用Node.js等后端技术作为数据访问层。以下是使用Node.js作为中间层的基本步骤: 1. 安装依赖:在项目中安装`mysql`库用于处理MySQL操作,可以使用npm(Node Package Manager)命令行工具: ``` npm install mysql ``` 2. 创建后端API:在Cocos Creator项目的`server`目录下,创建一个Node.js文件(例如`db.js`),编写代码来建立到本地MySQL数据库的连接,并提供CRUD(Create, Read, Update, Delete)操作。 ```javascript const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'your_username', password: 'your_password', database: 'your_database_name' }); connection.connect((error) => { if (error) throw error; console.log('Connected to MySQL server!'); }); // 示例:查询数据 exports.queryData = (sql, callback) => { connection.query(sql, (error, results) => { if (error) throw error; callback(results); }); }; // ... 其他增删改查操作 connection.end(); ``` 3. 在Cocos Creator中调用API:通过创建网络请求,从Cocos Creator向这个Node.js API发送请求,获取或更新数据。 4. 需要注意的是,这种方式不是跨平台的最佳实践,因为Node.js需要在服务器上运行。如果你希望在Cocos Creator本身运行客户端代码来访问数据库,你可能需要考虑云服务或者本地嵌入式数据库解决方案,比如SQLite。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值