Пожалуйста, потерпите меня, потому что это не легко объяснить:
По сути, у меня есть приложение реагирования, которое включает в себя arcgis для библиотеки JS (решение карты) и модули requireJS.
В моем webpack.config ниже я объявляю как внешние все lib, начиная с esri или dojo, чтобы не добавлять их в комплект.
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'
}
Как вы заметили, мои пакеты main и vendor публикуются в 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.