模块 - Modules

# module (模块) >d 通过模块构建的脚本,如果引用了外部的js文件,需要在在VS编译器中定义**脚本在设备上的绝对路径**。否则调试时会提示找不到js文件,导致运行出错。 >w 飞云: 使用require最常遇到的问题,就是报错,提示找不到模块。 这是因为执行的方式不正确导致的。 正确的方法: 1、在vscode中,新建项目。 2、创建项目目录,将项目建立到该目录。目录下,会自动生成项目文件。 3、在项目的main.js中,编写业务代码 4、在项目目录下,可以放一些公共模块(js文件),在main.js中引用。 5、每次执行,要选择运行项目(autoX),或者运行(autojs 8),不要选择”执行单脚本文件“!这个很关键。 6、报错的原因,通常是引用的文件路径不正确导致的。 7、具体的引用方法,可以参考下面的例子 ```js //20230314 By 飞云 log('引用main.js同目录的公共模块common.js''); // var common = require(engines.myEngine().cwd() + '/common.js'); //绝对路径 var common = require('common.js'); //相对路径 // log(common) ``` Auto.js 有一个简单的模块加载系统。 在 Auto.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块)。 例子,假设有一个名为 foo.js 的文件: ```js var circle = require('circle.js'); console.log("半径为 4 的圆的面积是 %d", circle.area(4)); ``` 在第一行中,foo.js 加载了同一目录下的 circle.js 模块。 circle.js 文件的内容为: ```js const PI = Math.PI; var circle = {}; circle.area = function (r) { return PI * r * r; }; circle.circumference = (r) => 2 * PI * r; module.exports = circle; ``` circle.js 模块导出了 area() 和 circumference() 两个函数。 通过在特殊的 exports 对象上指定额外的属性,函数和对象可以被添加到模块的根部。 模块内的本地变量是私有的。 在这个例子中,变量 PI 是 circle.js 私有的,不会影响到加载他的脚本的变量环境。 module.exports属性可以被赋予一个新的值(例如函数或对象)。 如下,bar.js 会用到 square 模块,square 导出一个构造函数: ```js const square = require('square.js'); const mySquare = square(2); console.log("正方形的面积是 %d", mySquare.area()); square 模块定义在 square.js 中: // 赋值给 `exports` 不会修改模块,必须使用 `module.exports` module.exports = function(width) { return { area: () => width ** 2 }; }; ```