注: @atlassian/webresources-webpack-plugin (中文(简体) ) 替换旧的 地图集-网络包装-网络资源-插图 软件包,现在已贬值.
阿特拉斯网络资源网络包插件
从您的网络包装代码自动生成网络资源定义, 以供使用 在Atlassian产品或插件中.
为什么?
Atlassian P2 插件系统 2008年运出. 当时,扶养管理 p2系统 网络资源管理器,或 WRM -是管理成长的神的终点 前端资源的复杂性。 它除其他外提出:
- 指定相关资源捆绑的能力,称为"网络资源".
- 确定网络资源相互依存性的能力,以便
- 在生产过程中可实现对必要编码的剪接,以及
- 可以维持源顺序.
快进至2017年,前端开发与当时大相径庭. JavaScript 模块系统和 Webpack 解决了WRM最初设定的许多问题 出来.
不幸的是,Atlassian的插件系统不会说网页包. 幸好我们可以教书 (原始内容存档于2018-10-21). Webpack to speak Atlassian-Plugin. 这个插件就是这样做的.
这有什么用?
当您将这个插件添加到您的 Webpack 配置时, 它会生成 XML 文件 和各种WRM配置 使您的代码运行在Atlassian产品.
您可以使用任何 JavaScript 模块系统来写入您的插件的前端代码 .
此插件将想方设法将全部内容都转换为正确 <web-resource> 声明,
与适当 <dependency> 声明使您的代码最终加载
在产品运行时间的正确顺序.
此插件支持并生成以下 Webpack 行为的正确WRM输出 :
- (单位:千美元)
<web-resource>每个网页包装入口 - 对
<web-resource>s 用于代码分割/ 装入同步块 - 装入非JavaScript资源(通过
ExtractTextPlugin(见a/cn.9/wg.iii/wp.83,第6段).
如何使用插件
基本设置
将此插件添加到您的网络包配置 。 每个入口的网络包装,
适当 <web-resource> 定义将在 XML 文件中为您生成,
然后可以捆绑到您的 Atlassian 产品或插件中, 准备服务
到产品运行时间的浏览器.
考虑到这个网络包配置:
const WrmPlugin = require('@atlassian/webresource-webpack-plugin');
module.exports = {
entry: {
'my-feature': path.join(FRONTEND_SRC_DIR, 'simple.js'),
},
plugins: [
new WrmPlugin({
pluginKey: 'my.full.plugin.artifact-id',
contextMap: {
'my-feature': ['atl.general'],
},
xmlDescriptors: path.resolve(OUTPUT_DIR, 'META-INF', 'plugin-descriptors', 'wr-defs.xml'),
}),
],
output: {
filename: 'bundled.[name].js',
path: path.resolve(OUTPUT_DIR),
},
};
输出会去 <OUTPUT_DIR>/META-INF/plugin-descriptors/wr-defs.xml,看起来是这样的:
<bundles>
<web-resource key="entrypoint-my-feature">
<transformation extension="js">
<transformer key="jsI18n"/>
</transformation>
<context>atl.general</context>
<resource name="bundled.my-feature.js" type="download" location="bundled.my-feature.js" />
</web-resource>
</bundles>
还有.., <OUTPUT_DIR>/META-INF/fe-manifest-associations/ 将包含此 webpack 构建创建的资源列表
以及AMPs资源协会功能的国家预防机制软件包名称.
软件包名称可以通过通过指定 packageName 字段直接取入WrmPlugin,否则取出
自动从 Webpack 最近的父软件包.json context 目录.
关联在 P2 插件中被 AMP 自动检测出, 并预计将在
target/classes/META-INF/fe-manifest-associations 用于构建插件.
在您的 P2 插件中完成输出
在您的 P2 插件工程中 pom.xml 文件,添加
META-INF/plugin-descriptors 目录作为一个 <Atlassian-Scan-Folders> 标签
输入 <instruction> 用于 AMPS 插件的构建配置.
<build>
<plugins>
<plugin>
<!-- START of a bunch of stuff that is probably different for your plugin, but is outside
the scope of this demonstration -->
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-amps-plugin</artifactId>
<version>6.2.11</version>
<!-- END differences with your plugin -->
<configuration>
<instructions>
<Atlassian-Scan-Folders>META-INF/plugin-descriptors</Atlassian-Scan-Folders>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
演示 P2 插件用途
您可以在此看到使用 Webpack 插件的演示 P2 插件 : {\fn华文楷体\fs20\bord1\shad1\1che0e0e0\2ch000000}相克出道出道了到底出道了
- 观看这个 AtlasCamp 2018 的谈话, 使用这个插件等使您的 devloop 超快: https://youtu.be/ VamdjcJCc0Y (中文(简体) )
- 观看此 AtlasCamp 2017 讨论如何在 P2 顶上构建和整合您自己的前端编程, 它引入了此插件的α版本 : https://youtu.be/2yf-TzKerVQ?t=537 (英语)
特征
代码分割
如果你使用任何网络包装的代码分割技术,例如调用 require.ensure, (中文(简体) ),
此插件将自动生成 <web-resource> 定义,以及
自动将其翻译为适当的呼叫,以便在Atlassian同步加载
产品运行时间.
换句话说,你实际上没有努力 使你的关键路径小:
灵活生成 web-resource 定义
默认情况下,生成的网络资源将具有:
- 基于您网络包装条目名称的密钥,以及
- 将列入
<context>以输入点命名.
例如,一个被命名为"我的地物"的入口将产生这样的网络资源:
<web-resource key="entrypoint-my-feature">
<context>my-feature</context>
<!-- the resources for your entry-point -->
</web-resource>
对于新代码,这应该足够让你的特性加载到你想要的位置 插件或产品 - 假设服务器端的调用包含您的网络资源 .
有时,为了确保你的代码负载 当它被预期,你需要 覆盖
为您生成的值。 在定义 WrmPlugin配置,可以提供:
- A 类
webresourceKeyMap将网络资源的密钥或名称更改为您需要的,或者 - A 类
contextMap将网络资源包含在您期望它加载的任意数量的网络资源上.
很可能你想要为一个网络资源指定额外的上下文来加载到. 何时 您所有的网络资源都是通过上下文自动生成和加载的,不需要知道它的密钥. 你个 通常会在将旧代码重构到网络包装时提供自己的网页资源密钥,以保留 任何先前存在的代码中的依赖关系.
模块映射到 web-resource编号
如果使用普通库或模块——例如:"jquery"或"backbone"——你知道
此模块由产品运行时的 P2 插件提供, 您可以绘制您的用法
模块 web-resource 这提供了它.
你只需要宣布适当的网页包装 external 模块,并添加条目
用于外部 providedDependencies 此插件的配置 。 当你的代码是
编译,此插件将自动添加一个合适的 web-resource 依赖关系
将保证您的代码负载在它的受抚养人之后, 并会防止您的捆绑变得太大.
详细情况请检查 providedDependencies 区域.
遗产 web-resource 包含
90%的时间, 您的 JavaScript 代码应该声明对其它模块的明确依赖 .
在剩下的10%的情况下,您可能需要在运行时依赖WRM,以确保您的代码负载进入
正确的顺序。 9%的时间,模块映射功能 应该足够你。 其余部分
1%,你可能只需要添加一个 web-resource 依赖强制命令.
您可以在代码中添加导入语句,以添加一个 <dependency> 到您生成的网络资源 .
包括 web-resources 从导出 这个 插件, 您可以使用短标记, 如 :
// in AMD syntax
define(function (require) {
require('wr-dependency!my-webresource');
console.log('my-webresource will have been loaded synchronously with the page');
});
// in ES6
import 'wr-dependency!my-webresource';
console.log('my-webresource will have been loaded synchronously with the page');
包括出口资源 其他项目 插件, 提供完整的插件密钥 :
// in AMD syntax
define(function (require) {
require('wr-dependency!com.atlassian.auiplugin:dialog2');
console.log('webresource will have been loaded synchronously with the page');
});
// in ES6 syntax
import 'wr-dependency!com.atlassian.auiplugin:dialog2';
console.log('webresource will have been loaded synchronously with the page');
遗产运行时间 resource 包含
95%的时间, 您应用程序的非 JavaScript 资源-- CSS, 图像, 模板等.. 可以通过网包装入器捆绑和装入。 有时候,虽然,你会有 只在Atlassian产品运行期间工作的资源 -- -- 认为事情是这样的 阿特拉斯语 豆类模板和产品 Less文件 用于外观和外观样式——和 无法在超前编译期间 让他们工作.
在这种情况下,您可以在代码中添加导入语句,以添加一个 <resource> 给您的
生成的网络资源 :
// in AMD syntax
define(function (require) {
require('wr-resource!my-runtime-styles.css!path/to/the/styles.less');
require('wr-resource!my-compiled-templates.js!path/to/the/templates.soy');
console.log('these styles and templates will be transformed to CSS and JS at product runtime.');
});
// in ES6 syntax
import 'wr-resource!my-runtime-styles.css!path/to/the/styles.less';
import 'wr-resource!my-compiled-templates.js!path/to/the/templates.soy';
console.log('these styles and templates will be transformed to CSS and JS at product runtime.');
配置插件
Atlassian Web-Resource网络包插件具有一些配置选项.
pluginKey (须)
您的 P2 插件的完全合格组名和 artechId 。 由于WRM的工作方式,这个 值对于支持同步块的装入以及任意性 (非JavaScript)资源.
xmlDescriptors (须)
一个绝对文件路径, 输出生成的 XML 到哪里 。 这应该是指子目录
马文项目 ${project.build.outputDirectory} (评价为: target/classes 在一个
标准马文项目).
此配置值的子目录部分需要在工程中配置 pom.xml,作为
以上基本使用部分所示.
addEntrypointNameAsContext (备选)
默认是 false。 。 。 .
设定为 true,所有生成的网络资源都将添加到
a 上下文与出入口同名.
切入点名称中任何打破批次 URL 的字符都被替换为 -,以及任何线索 - 已删除 :
切入点 feature/nested/app 成为上下文 feature-nested-app。使用“contextMap”选项手动设置名称.
addAsyncNameAsContext (备选)
默认是 false。 。 。 .
设定为 true,所有生成的用于有名称(通过 webpackChunkName 将添加到
名称“ async- chunk- ” 的上下文, 字符替换相同
作为 addEntrypointNameAsContext。 。 。 .
contextMap (备选)
一组键值对,允许您指定哪些网络包条目点 应在Atlassian产品运行时间的网络资源背景下出现.
您可以提供单个的网络资源上下文作为字符串,也可以提供一系列上下文字符串.
这些名称作为书面使用, 所以一个打破批量 URL 失败构建的名称: 上下文可能不包含 /, (中文(简体) ),
?, (中文(简体) ), +, (中文(简体) ), ,, (中文(简体) ), #, (中文(简体) ), %, (中文(简体) ), &,白色空间或可打印的 ASCII 外部的任何东西,并且可能不会从 -。价值
不是一个非空字符串被忽略.
conditionMap (备选)
指定对某一入境点适用何种条件的对象. 简单示例 :
conditionMap: {
"my-first-entry-point": {
"class": "foo.bar"
},
}
将产生 :
<condition class="foo.bar" />
配有参数的复杂嵌入实例:
conditionMap: {
"my-first-entry-point": {
"type": "AND",
"conditions": [
{
"type": "OR",
"conditions": [
{
"class": "foo.bar.baz",
"invert": true,
"params": [
{
"attributes": {
"name": "permission"
},
"value": "admin"
}
]
},
{
"class": "foo.bar.baz2",
"params": [
{
"attributes": {
"name": "permission"
},
"value": "project"
}
]
}
]
},
{
"class": "foo.bar.baz3",
"params": [
{
"attributes": {
"name": "permission"
},
"value": "admin"
}
]
}
]
}
}
将产生 :
<conditions type="AND">
<conditions type="OR">
<condition class="foo.bar.baz" invert="true">
<param name="permission">admin</param>
</condition>
<condition class="foo.bar.baz2" >
<param name="permission">project</param>
</condition>
</conditions>
<condition class="foo.bar.baz3" >
<param name="permission">admin</param>
</condition>
</conditions>
dataProvidersMap (备选)
这个 dataProvidersMap 选项允许在输入点和数据提供者列表之间配置关联.
数据提供者可用于提供从服务器端到前端的数据,并声称使用 WRM.data.claim API (英语). 欲了解更多数据提供者,请参考: 正式文件。 。 。 .
要将条目与数据提供者列表相连接,您可以配置以下的 Webpack 配置 :
module.exports = {
entrypoints: {
'my-first-entry-point': './first-entry-point.js',
'my-second-entry-point': './first-entry-point.js',
},
plugins: [
WrmPlugin({
pluginKey: 'my.full.plugin.artifact-id',
dataProvidersMap: {
'my-first-entry-point': [
{
key: 'my-foo-data-provider',
class: 'com.example.myplugin.FooDataProvider',
},
],
'my-second-entry-point': [
{
key: 'my-bar-data-provider',
class: 'com.example.myplugin.BarDataProvider',
},
{
key: 'my-bizbaz-data-provider',
class: 'com.example.myplugin.BizBazDataProvider',
},
],
},
}),
],
};
将产生 :
<atlassian-plugin>
<web-resource key="<<key-of-my-first-entry-point>>">
<resource />
<resource />
<data key="my-foo-data-provider" class="com.example.myplugin.FooDataProvider" />
</web-resource>
<web-resource key="<<key-of-my-first-entry-point>>">
<resource />
<resource />
<data key="my-bar-data-provider" class="com.example.myplugin.BarDataProvider" />
<data key="my-bizbaz-data-provider" class="com.example.myplugin.BizBazDataProvider" />
</web-resource>
</atlassian-plugin>
deprecatedEntrypoints (备选)
指定哪些切入点应标为已贬值的对象.
A 类 true 可使用数值来简单地标出一个切入点被贬值,而不提供任何补充资料.
否则,可以使用一个对象来提供附加上下文,说明何时和为什么切入点贬值。 给 alternative 键,
数值应当为: plugin-key:web-resource,或者作为同一插件中另一个切入点的参考.
module.exports = {
entrypoints: {
'my-first-entry-point': './first-entry-point.js',
'my-second-entry-point': './second-entry-point.js',
'my-third-entry-point': './third-entry-point.js',
},
plugins: [
WrmPlugin({
pluginKey: 'my.full.plugin.artifact-id',
deprecatedEntrypoints: {
'my-first-entry-point': true,
'my-second-entry-point': {
sinceVersion: '3.0',
removeInVersion: '4.0',
// alternative could also reference another entrypoint i.e. 'my-third-entry-point'
alternative: 'some.other.plugin:replacement-resource',
extraInfo: 'We moved all functionality to some.other.plugin',
},
},
}),
],
};
将产生 :
<atlassian-plugin>
<web-resource key="entrypoint-my-first-entry-point">
<!-- ... rest of definition ... -->
<deprecated />
</web-resource>
<web-resource key="entrypoint-my-second-entry-point">
<!-- ... rest of definition ... -->
<deprecated since="3.0"
remove="4.0"
alternative="some.other.plugin:replacement-resource"
>
We moved all functionality to some.other.plugin
</deprecated>
</web-resource>
</atlassian-plugin>
transformationMap (备选)
指定要应用到文件类型的对象. 默认转换为:
*.js备忘jsI18n*.soy备忘soyTransformer, (中文(简体) ),jsI18n
自定义转换的示例配置 :
{
"transformationMap": {
"js": ["myOwnJsTransformer"],
"sass": ["myOwnSassTransformer"]
}
}
这将为每个生成的网络资源设定以下转型:
<web-resource key="...">
<transformation extension="js">
<transformer key="myOwnJsTransformer"/>
</transformation>
<transformation extension="sass">
<transformer key="myOwnSassTransformer"/>
</transformation>
</web-resource>
如果您想要延长默认变换, 您可以使用内置 extendTransformations 函数由插件提供.
它会将默认的转换与您的自定义配置合并 :
const WrmPlugin = require('@atlassian/webresource-webpack-plugin');
new WrmPlugin({
pluginKey: 'my.full.plugin.artifact-id',
transformationMap: WrmPlugin.extendTransformations({
js: ['myOwnJsTransformer'],
sass: ['myOwnSassTransformer'],
}),
});
您也可以通过路过完全禁用转换 false 插件配置值 :
{
"transformationMap": false
}
webresourceKeyMap (备选)
允许您更改给定的 Web 包条目点生成的 Web 资源的名称 .
当您期望其他插件需要直接依赖您自动生成的网络资源时, 这样做是有用的, 例如 当您重构一个通过 web 软件包生成的已有特性( 及其网络资源) 时.
此参数可以选择 string 或者说 object 有属性 key, (中文(简体) ), name 财务报告和审定财务报表 state 对应
key, (中文(简体) ), name 财务报告和审定财务报表 state 属性 web-resource XML 元素 . name 财务报告和审定财务报表 state 属性是可选的.
绘图如下:
{
"webresourceKeyMap": {
"firstWebResource": "first-web-resource",
"secondWebResource": {
"key": "second-web-resource",
"name": "Second WebResource",
"state": "disabled"
}
}
}
将产生下列网络资源:
<atlassian-plugin>
<web-resource key="first-web-resource" name="" state="enabled">
<!-- your resources definitions -->
</web-resource>
<web-resource key="second-web-resource" name="Second WebResource" state="disabled">
<!-- your resources definitions -->
</web-resource>
</atlassian-plugin>
providedDependencies (备选)
一个对象的地图,让你联想到什么网络资源 包含特定的外部JS依赖.
外部依赖性绘图的格式如下:
{
'dependency-name': {
dependency: 'atlassian.plugin.key:webresource-key',
import: {
// externals configuration
},
},
}
当您的代码通过网络包编译时, 任意发生 dependency-name 在模块导入中找到
语句将在 web 软件包输出中替换,并使用适当的网页资源 <dependency> 将会是
添加到生成的网络资源中 .
这个 import 属性是一个字符串或对象,指定如何在代码中导入依赖.
提供的对象是紧随 网络包外部格式。 。 。 .
如果你没有设置 externalsType 或者说 library.type 在配置中,然后使用的默认属性是 var。另一个流行的选择是 amd 由于大多数Atlassian产品都使用AMD来装入模块(但随后是 externalsType 也应予以确定).
wrmManifestPath (备选)
用于存储对象映射的 WRM 显示文件的路径 .
在 providedDependencies 属性是一个依赖性的地图,包括生成的网络资源密钥.
此映射是完全相同的格式 providedDependencies 以上选项,
因此,人们可以用这张地图作为源 providedDependencies 在另一个建筑中:
{
"providedDependencies": {
"dependency-name": {
"dependency": "atlassian.plugin.key:webresource-key",
"import": {
"var": "require('dependency-amd-module-name')",
"amd": "dependency-amd-module-name"
}
}
}
}
说明和限制
- 两者
output.library财务报告和审定财务报表output.libraryTarget必须设置用于创建 WRM 显示文件. output.library不得含有[通 或[通 ,但允许使用[名]output.libraryTarget必须设置为amd- 未来 WRM 清单文件中可能添加更多属性
示例配置
{
"output": {
"library": "[name]",
"libraryTarget": "amd"
}
}
resourceParamMap (备选)
指定额外参数的对象( E)<param/>用于 resource编号.
例如,要指定内容类型,服务器应该对某一资产文件类型(例如图像/字体)作出回应:
{
"resourceParamMap": {
"svg": [
{
"name": "content-type",
"value": "image/svg+xml"
}
]
}
}
某些Atlassian产品可能需要根据装入的文件类型设置具体内容类型. 默认情况下包含 svg 作为“ 图像/ svg+xml” 的内容类型
locationPrefix (备选)
添加给前缀值到 location 属性 resource 节点.
当您的 Webpack 输出被放置在插件最终根文件夹的子目录中时使用此选项 .
devAssetsHash (备选)
用户在网络资源名称中提供了包含开发模式所需要全部资产的值(而不是DEV PSEUDO HASH).
watch 财务报告和审定财务报表 watchPrepare (备选)
激活"监视-模式". 这必须与一个webpack-dev-server同时运行.
watchPrepare
在 XML 描述符中创建"代理"资源并引用它们. 这些代理资源将重定向到一个也必须运行的webpack-dev-server. 为使这项工作正常进行,确保webpack-配置"options.output.publicPath"指向webpack-dev-server - 包括其端口. (例如:http://localhost:9000)
watch (备选)
使用 Webpack-dev-server 运行进程时使用.
useDocumentWriteInWatchMode (备选)
设定为 true,生成的监视模式模块将同步将脚本标记添加到文档中 document.write 当文档正在装入时,而不是总是依赖同步附加的脚本标记(默认行为).
当捆绑有望提前在页面上提供时,例如当模板中的代码依赖于javascript来被屏蔽地加载时,此功能是有用的.
noWRM (备选)
将不会在 Webpack 运行时间中添加任何 WRM 特性, 或尝试在仍然处理请求时重定向 async- chunk 请求到 wr-dependency 财务报告和审定财务报表 wr-resource。 。 。 .
这对于在提供WRM功能的运行中产品之外开发前端可能有用.
singleRuntimeWebResourceKey (备选)
使用 Webpack 选项时为 Webpack 运行时间设置一个特定的 Web 资源密钥 optimization.runtimeChunk 改为 single (见 运行时间Chunk 文档) (中文(简体) ). 默认是 common-runtime。 。 。 .
chunkLoadingGlobal (备选)
覆盖用于 output.chunkLoadingGlobal 当插件自动设置时。 在Webpack 5和Rspack中, chunkLoadingGlobal 是用于装入块的全局变量。 何时 多个应用程序 在同一个页面上使用此插件负载,每个应用程序必须有一个不同的 chunkLoadingGlobal 因此块/模块ID不相冲突。 如果您没有设置 output.chunkLoadingGlobal 在您的配置中,插件从 pluginKey (或如果提供的话,来自本选项). 如果你已经设置 output.chunkLoadingGlobal 在您的 webpack/ rspack 配置中,该值保持不变.
verbose (备选)
显示日志输出的动词。 默认是 false。 。 。 .
最低要求
此插件的构建是为了与以下版本的外部构建工具相配合:
- 节点 18 (在 P2 插件构建时)
- 阿特拉斯马文插件套件(AMPS) 6.2.11+ (中文(简体) )
- 阿特拉斯斯网络资源管理器(WRM) 4.3.6+ (单位:千美元)
这个插件通过webpack 5.0+和rspack 1.5+测试.
建议使用网页包5
- 要编译 CSS, 使用
css-loader >= 5和mini-css-extract-plugin >= 2。 。 。 . - 使用时
mini-css-extract-plugin运行时间选项需要设置为错误 。 这样可以防止mini-css-extract-plugin由WRM完成.
升级指南
解决问题和已知问题
自动排除出故障的工具
我们提供了一个工具,帮助排除网络包和Atlassian P2项目的配置出问题.
要检查您的工程是否正确配置, 请打开终端并导航到您的工程的根目录 。 下, 运行故障排除命令 :
npx @atlassian/wrm-troubleshooting
该工具会问你几个问题, 并指引您是否发现您的项目配置有问题 .
你可以读到更多关于 清除故障的工具 国家预防机制网页 @atlassian/wrm-troubleshooting 软件包。 。 。 .
运行时间问题
e.O is not a function
OR( 当最小化: 虚假)
__webpack_require__.O is not a function
如果您使用外部插件提供的捆绑的网络资源 optimization.runtimeChunk: 'single'
财务报告和审定财务报表 optimization.splitChunks.chunks: 'all' 您可能需要配置您的插件来同时使用 runtime: 'single'
这样,在加载块时共享的 webpack 运行时对象具有相同的签名.
一个页面上的多应用程序(chunk/模块ID冲突)
当使用此插件构建的多个应用程序被加载在同一页上(例如不同的P2插件或出入口)时,每个应用程序的运行时间必须被隔离. 否则,它们可以共享相同的块负载全局和数字块/模块ID可以指每个app中不同的代码.
解决方案 : 每个建筑必须有一个独特的 output.chunkLoadingGlobal (Webpack 5 / Rspack) (中文(简体) ). 插件为您这样做: 如果 output.chunkLoadingGlobal 不是在您的配置中设定的 而是从您的配置中设定的 pluginKey (因此每个插件都得到一个独特的运行时间). 您可以用插件选项覆盖生成的值 chunkLoadingGlobal,或设置 output.chunkLoadingGlobal 直接在您的 Webpack/ rspack 配置中 。 每个应用程序使用不同的配置时不需要额外的每个应用程序配置 pluginKey。 。 。 .
其他问题
请检查您的构建和捆绑是否如您预期的那样有效, 没有启用此插件 。 您可以禁用WRM Webpack插件,并捆绑代码,以验证webpack输出中没有出错或警告.
这个插件对Webpack最终输出的修改很少. 如果你的包有内容错误, 这可能是由于网页包与您构建配置中的加载器插件的版本不兼容.
此插件的已知问题列表于 阿特拉斯生态系统问题跟踪仪。 。 。 . 我们的发展团队每月审查所有未决问题和分类.