外部依赖项
外部依赖是一个库,其中包含您自己无法实现或不想实现的代码。例如,您可以使用官方库作为外部服务或者数据结构或算法的自定义实现。
Atlas会自动转换依赖项,并且还支持大多数内置Node.js 模块。
注意
创建您自己的模块
虽然大多数npm模块由第三方编写,但您也可以创建并发布自己的npm模块来容纳特定于您的应用程序的逻辑。 您可以将模块提供给 Node.js 社区,也可以保留以供私人使用。 有关详情,请查看 npm 的有关 向注册表提供软件包 的指南 。
添加外部软件包
要导入和使用外部依赖,首先需要将依赖项添加到应用程序中。您可以按名称添加软件包,也可以上传依赖目录。
重要
覆盖现有依赖项
您一次只能使用一种方法来指定应用可以使用的外部包。用于指定依赖项的最新方法是数据源,并且会覆盖之前的规范。
例如,通过用户界面按名称添加的软件包会覆盖之前添加的同一软件包的所有副本,包括上传的依赖项目录中的副本。
按名称和版本添加软件包
可以按名称将 npm 注册表中的软件包添加到相关应用中。可以添加特定版本或使用最新版本。
导航到Atlas用户界面中的“依赖项”
导航至 Triggers页面
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Triggers。
会显示触发器页面。
选择要添加依赖项的trigger 。
在 Edit Trigger 页面上, Go Function 部分并单击 Add Dependency。
上传依赖项目录
您可以将压缩的 node_modules
包目录上传到应用。压缩的依赖目录不得超过 15MB。
重要
覆盖现有依赖项
导入存档时,所有现有依赖项都将被删除。
在本地安装外部依赖
要上传外部依赖项,首先需要一个本地 node_modules
文件夹,其中包含至少一个 Node.js 包。可以使用以下代码片段在本地安装要上传的依赖项:
npm install <package name>
如果 node_modules
文件夹尚不存在,则此命令会自动创建它。
注意
其他安装方法
您还可以配置 package.json
并运行 npm install
命令来安装 package.json
中列出的所有软件包(及其依赖项)。
要了解有关 npm 和 node_modules
的更多信息,请查阅 npm 文档。
上传依赖存档
创建包含依赖项的存档后,可以使用Atlas用户界面上传依赖项存档:
导航至Triggers页面
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Triggers。
会显示触发器页面。
选择 Dependencies 标签页。
单击 Upload Folder(连接)。
在模式窗口中,单击Upload Folder ,然后选择您刚刚创建的
node_modules.tar.gz
存档。单击Add 。 Atlas上传存档文件,这可能需要几分钟时间,具体取决于互联网连接速度和依赖项存档的大小。
Atlas会显示一个横幅,指示操作成功或失败。 如果成功, Dependencies标签页将显示您在依赖项存档中包含的依赖项列表。
如果已启用草稿,还必须单击Review & Deploy来应用这些更改。
如果已禁用草稿,则更改将在5到60秒内生效,具体取决于依赖项存档的大小。
在函数中导入软件包
可以导入已添加到应用中的内置模块和外部软件包,然后在函数中使用它们。要导入一个软件包,请使用函数体中的包名称来调用 require()
。
重要
从哪里导入模块?
Node.js 项目通常会在每个文件的全局范围内放置require()
调用,但Atlas不支持此模式。 必须在函数作用域内调用require()
。
导入完整模块
exports = () => { const R = require("ramda"); return R.map(x => x*2, [1,2,3]); }
导入模块子文件夹
exports = function(arg){ const cloneDeep = require("lodash/cloneDeep"); var original = { name: "Deep" }; var copy = cloneDeep(original); copy.name = "John"; console.log(`original: ${original.name}`); console.log(`copy: ${copy.name}`); return (original != copy); };