请忍受,因为这不容易解释:
基本上,我有一个react应用程序,其中包含用于JS库(地图解决方案)和requireJS模块的arcgis。
在下面的webpack.config中,我将以esri或dojo开头的所有lib声明为外部文件,以免将其添加到包中。
devtool: 'source-map',
entry: ['babel-polyfill', './lib/app/index.js'],
output: {
libraryTarget: 'amd',
},
resolve: {
extensions: ['.webpack.js', '.web.js', '.js'],
},
externals: [
function(context, request, callback) {
if (
/^dojo/.test(request) ||
/^vendor_lib/.test(request) ||
/^dojox/.test(request) ||
/^dijit/.test(request) ||
/^esri/.test(request) ||
/^esriapp/.test(request)
) {
callback(null, 'amd ' + request);
} else {
callback();
}
},
],
Arcgis Map与dojo协同工作,因此必须设置dojo加载程序。 在我的index.htlm中,必须将其设置为需要包main.bundle才能与arcgis lib一起使用。
<head>
<script type="text/javascript">
var dojoConfig = {
parseOnLoad: false,
async: true,
packages: [
{
name: 'esriapp',
location: "/ui/loc" + '/js'
},
{
name: 'vendor_lib',
location: "//static.solutions.com/ui/loc/static/vendor",
main: "vendor.bundle.0d2fdaf854996166b09f"
}
],
callback: function () {
require(["//static.solutions.com/ui/loc/static/main.bundle.cbfa3433d23bbdcda6ab.js"]);
}
};
</script>
</head>
<body>
<script type="text/javascript"
src="https://js.arcgis.com/3.18/init.js"></script>
</body>
这一切正常。
但是,在导入自定义requireJS模块方面存在问题:
{
name: 'esriapp',
location: "/ui/loc" + '/js'
}
您已经注意到,我的捆绑包主包和供应商都发布到带有哈希签名的CDN中。
但是,“ / ui / loc”(esriapp)指向本地存储库。它包含我开发的requireJS模块,其中包含对arcgis lib的引用。 示例(/ui/loc/ClusterLayer.js):
define(
[
'dojo/_base/declare',
'esri/dijit/PopupTemplate',
'esri/layers/GraphicsLayer',
'esri/geometry/ScreenPoint',
...
],
function(
declare,
arrayUtils,
...
) {
return declare( 'esriapp.ClusterLayer',[GraphicsLayer], {
...
这些文件不是捆绑软件的一部分,因此不是指纹(版本化)。
因此,当我在生产环境中部署我的应用程序时,根据部署的版本,有时'esriapp'返回的文件不正确。
基本上,我得到的文件版本与我已部署的应用程序版本不同。
所以问题是:
如何捆绑在本地开发的requireJS模块,并将其用作dojo中的软件包。