企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
如果你已经开发了一些与某个硬件(例如一个液晶显示器或某种模块)接口的代码,如果你能制作并提交一个 JavaScript 模块(库),其他人可以通过像 require("libname")这样的命令来使用,那就太好了。 * 获取一个 GitHub 账号 * 访问 [https://github.com/espruino/EspruinoDocs](https://github.com/espruino/EspruinoDocs) 并点击右上角的`Fork`。现在你在你的 GitHub 账号中拥有了所有文档的自己的副本。 * 点击`devices`文件夹,在顶部写着`EspruinoDocs/devices/+`的地方,点击“+”。 * 以你正在使用的设备命名你的模块(尽量保持非常简短和简洁,比如对于诺基亚液晶显示器中的驱动芯片可以用 PCD8544),并在末尾添加“.js”,例如 MOD123.js。 将以下模板复制并粘贴到文件中: ~~~ /* Copyright (c) 2014 Your Name. See the file LICENSE for copying permission. */ /* Quick description of my module... */ var C = { MY : 0x001, // description PRIVATE : 0x001, // description CONSTANTS : 0x00423 // description }; function MOD123(pin1,pin2) { this.pin1 = pin1; this.pin2 = pin2; } /** 'public' constants here */ MOD123.prototype.C = { MY : 0x013, // description PUBLIC : 0x0541, // description CONSTANTS : 0x023 // description }; /** Put most of my comments outside the functions... */ MOD123.prototype.foo = function() { // you can use C.PRIVATE // or this.C.PUBLIC }; /** Put most of my comments outside the functions... */ MOD123.prototype.bar = function() { }; /** This is 'exported' so it can be used with `require('MOD123.js').connect(pin1,pin2)` */ exports.connect = function (pin1, pin2) { return new MOD123(pin1, pin2); }; ~~~ 为了测试你的模块,我们建议你将其逐字复制到网络集成开发环境的右侧,在顶部加上行`var exports={}`,并且在底部,当你使用该模块时,写成`exports.myfunction()`而不是`require('MOD123').myfunction()`。 查看一些其他模块以获取示例(尽管其中一些仍然不遵循这种形式)。这里有一些重要的要点需要注意,这将有助于使你的模块尽可能高效: 首先,要确保模块的代码结构清晰,逻辑简洁,避免不必要的复杂计算和重复操作。 其次,对于资源的使用要合理优化,避免浪费内存等资源。 再者,要考虑模块在不同场景下的适用性和稳定性,尽量减少可能出现的错误情况。 另外,注意代码的可维护性,添加必要的注释和文档,以便其他人理解和使用。 最后,不断测试和改进模块,根据实际使用中发现的问题及时进行调整和完善。 * 当一个模块被加载时,Espruino 在其自身的作用域中执行该文件,然后将在该作用域中定义的变量和函数存储在模块的缓存中。 * 在根作用域中定义的任何函数和变量将是公共的,如果在某人的代码中多次使用该模块,它们不会被重复。然而,如果你在另一个函数内部定义一个函数,例如在 exports.myfunction 内部,那么每次调用 exports.myfunction 时该函数将再次被创建。 * 当大多数用户使用 require()时,网络集成开发环境将加载他们模块的缩小版本。这意味着: * * 如果合理的话,任何非公共的常量和函数将被折叠 - 节省空间并使库更快。 * * 所有的注释将被移除。 * 即使用户不使用缩小版本(也许他们将完整版本复制到微型 SD 卡或重新配置网络集成开发环境的默认值): * * Espruino 逐字存储函数的内容(包括注释),但函数声明之外的注释不会占用空间。 * 点击“提交新文件”。如果你以后想要更改它,你总是可以稍后点击该文件,然后点击右上角的“编辑”。 * 现在我们只需要创建一个小的文档文件,以便其他人可以找到你的模块。添加另一个文件,这次称为 MOD123.md。 * 将以下模板复制并粘贴到文件中(注意模块的第一个关键字应该始终是`Module`): ~~~ <!--- Copyright (c) 2014 Your Name. See the file LICENSE for copying permission. --> My Module's proper title ===================== * KEYWORDS: Module,Comma,separated,list,of,search,words A bit about my module. Use the [MOD123](/modules/MOD123.js) ([About Modules](/Modules)) module for it. You can wire this up as follows: | Device Pin | Espruino | | ---------- | -------- | | 1 (GND) | GND | | 2 (VCC) | 3.3 | | 3 (SIGIN) | A0 | | 4 (SIGNOUT)| A1 | How to use my module: var foo = require("MOD123").connect(A0,A1); foo.usingFoo(); ~~~ 为了使你的模块描述格式良好,你只需要以一种稍微特殊的方式来编写它,这被称为 Markdown。查看此链接以获取如何使用它的示例,或许也可以看看 GitHub 中的其他模块。 如果你的模块有多个函数,你可能还想在文件末尾添加这个。这将扫描 JavaScript 文件以查找导出的函数和形式为 `/**...*/ `的注释 - 这些随后将被包含作为你模块的参考。 ~~~ Reference --------- * APPEND_JSDOC: MOD123.js ~~~ 你也可以添加`APPEND_USES`,这样如果其他人编写教程并在顶部写着`USES: MOD123`,它们将会在你模块的页面上列出: ~~~ Using ----- * APPEND_USES: MOD123 ~~~ * 就是这样!点击“提交新文件”。 * 当你把一切都弄成你想要的样子时,在查看你的 GitHub 仓库主页面时,点击“拉取请求”。 * 确保它显示的是正确的内容,然后点击`点击为此比较创建拉取请求`并输入一个简短的描述。 * 最后点击`发送拉取请求`,你就完成了!我们将能够接收你的更改并将它们与其他所有内容合并!