外部依赖
无法正常捆绑的非模块化库或独立应用程序可以通过在需要时提供 require
或 define
的实现,以及在项目 .dojorc
文件中进行一些配置来包含在 Dojo 应用程序中。
外部依赖项的配置可以在 build-app
配置的 externals
属性下提供。externals
是一个对象,它有两个允许的属性
outputPath
:一个可选属性,指定应将文件复制到的输出路径。dependencies
:一个必需的数组,定义哪些模块应该通过外部加载器加载,以及哪些文件应该包含在构建中。每个条目可以是以下两种类型之一- 一个字符串,表示此路径及其所有子路径应该通过外部加载器加载。
- 一个对象,为需要复制到构建应用程序中的依赖项提供额外的配置。此对象具有以下属性
属性 | 类型 | 可选 | 描述 |
---|---|---|---|
from |
字符串 |
否 | 相对于项目根目录的路径,指定要复制到构建应用程序中的文件或文件夹的位置。 |
to |
字符串 |
是 | 一个路径,用作 from 的替代位置,用于将此依赖项复制到该位置。默认情况下,依赖项将被复制到 ${externalsOutputPath}/${to} 或 ${externalsOutputPath}/${from} (如果未指定 to )。如果路径中存在任何 . 字符,并且它是一个目录,则它需要以正斜杠结尾。 |
name |
字符串 |
是 | 模块 ID 或应用程序源代码中引用的全局变量的名称。 |
inject |
字符串、字符串数组或布尔值 |
是 | 此属性表示此依赖项定义或包含应在页面上加载的脚本或样式表。如果 inject 设置为 true ,则 to 或 from 指定的位置处的文件将在页面上加载。如果此依赖项是一个文件夹,则 inject 可以设置为字符串或字符串数组,以定义一个或多个要注入的文件。inject 中的每个路径都应相对于 ${externalsOutputPath}/${to} 或 ${externalsOutputPath}/${from} (取决于是否提供了 to )。 |
type |
'root' 或 'umd' 或 'amd' 或 'commonjs' 或 'commonjs2' |
是 | 强制此模块使用特定的解析方法。对于 AMD 风格的 require,使用 umd 或 amd 。对于 node 风格的 require,使用 commonjs ,要访问对象作为全局变量,使用 root |
例如,以下配置将 src/legacy/layer.js
注入到应用程序页面,注入定义 MyGlobal
全局变量的文件,声明模块 a
和 b
是外部的,应该委托给外部层,然后复制文件夹 node_modules/legacy-dep
,从中注入几个文件。所有这些文件都将被复制到 externals
文件夹,可以通过在 externals
配置中指定 outputPath
属性来覆盖它。
{
"build-app": {
"externals": {
"dependencies": [
"a",
"b",
{
"from": "node_modules/GlobalLibrary.js",
"to": "GlobalLibrary.js",
"name": "MyGlobal",
"inject": true
},
{ "from": "src/legacy/layer.js", "to": "legacy/layer.js", "inject": true },
{
"from": "node_modules/legacy-dep",
"to": "legacy-dep/",
"inject": ["moduleA/layer.js", "moduleA/layer.css", "moduleB/layer.js"]
}
]
}
}
}
externals
中包含的任何依赖项的类型都可以安装在 node_modules/@types
中,就像任何其他依赖项一样。
由于这些文件是主构建的外部文件,因此在生产构建中不会对文件进行版本控制或哈希处理,除了对任何 inject
ed 资产的链接除外。to
属性可用于指定一个版本化的目录,将依赖项复制到该目录,以避免缓存不同版本的相同文件。