Oracle Jet / requireJS мой не-AMD модуль не загружается и отображается как неопределенный, хотя я добавил его в shim - PullRequest
0 голосов
/ 17 октября 2019

Я использую 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>
...