Я использую Oracle JET для создания своего веб-приложения. Oracle JET использует RequireJS для обработки зависимостей.
Структура моего проекта следующая
root
|- node_modules
|- myThirdPartyLibrary
|- myThirdPartyLibrary.min.js
|- src
|- js
|- scripts
|- myLibrary.js
|- main.js
Я использую стороннюю библиотеку, которая не является AMD, и мой собственный библиотечный файл JavaScriptфункции, которая также не является AMD. Например, «myThirdPartyLibrary» и «myLibrary» просто имеют функции и переменные (примечание: нет «define»).
const displayLogging = true;
function function1() { ....}
Эти библиотеки НЕ зависят ни от чего другого, они являются простым javascript (т.е. не зависят от JQuery и т. Д.)
В "path_mapping.json" у меня есть следующее, чтобы убедиться, что "myThirdPartyLibrary "копируется из" node_modules "в" web "при сборке.
{
"baseUrl": "js",
"use": "local",
"cdns": {
"jet": {
"prefix": "https://static.oracle.com/cdn/jet/v7.2.0/default/js",
"config": "bundles-config.js"
},
"3rdparty": "https://static.oracle.com/cdn/jet/v7.2.0/3rdparty"
},
"libs": {
"myThirdPartyLibrary": {
"cdn": "3rdparty",
"cwd": "node_modules/myThirdPartyLibrary",
"debug": {
"src": "myThirdPartyLibrary.min.js",
"path": "libs/myThirdPartyLibrary/myThirdPartyLibrary.min.js",
"cdnPath": "myThirdPartyLibrary/myThirdPartyLibrary.min.js"
},
"release": {
"src": "myThirdPartyLibrary.min.js",
"path": "libs/myThirdPartyLibrary/myThirdPartyLibrary.min.js",
"cdnPath": "myThirdPartyLibrary/myThirdPartyLibrary.min.js"
}
}
В" main.js "я добавил прокладку для" myLibrary "
requirejs.config(
{
baseUrl: 'js',
paths:
{
'myThirdPartyLibrary': 'libs/myThirdPartyLibrary/myThirdPartyLibrary.min',
'myLibrary': 'scripts/myLibrary'
},
shim: {
myLibrary: {
exports: 'scripts/myLibrary'
}
}
});
In"main.js "Мне" требуется "оба" myThirdPartyLibrary "и" myLibrary ".
require(['ojs/ojbootstrap', 'knockout', 'appController', myThirdPartyLibrary, myLibrary],
function (Bootstrap, ko, app, myThirdPartyLibrary, myLibrary) {
console.log("\MY THIRD PARTY LIBRARY:")
console.log(myThirdPartyLibrary) // loads correctly
console.log("\MY LIBRARY:")
console.log(myLibrary) // ALWAYS showing as "undefined"
....
«myThirdPartyLibrary» загружен правильно, но «myLibrary» отображается как «undefined».
Я убедился, что обе библиотеки помещаются в структуру папок «web» при сборке.
Я не понимаю, почему один загружается, а не другой. Обе библиотеки не от AMD, и поэтому я попытался добавить прокладку для «myLibrary»
Hack fix?
Я могу «исправить» это, добавив «myLibrary»как скрипт импорта в "index.html". Но это не кажется мне правильным, так как «RequireJS» должен управлять всеми зависимостями.
<script type="text/javascript" src="js/libs/require/require.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/scripts/myLibrary.js"></script>