Требуется JS оптимизированный файл возвращает неопределенное - PullRequest
0 голосов
/ 31 марта 2020

Мы пытаемся минимизировать / запутать библиотеку js, чтобы мы могли использовать ее в других проектах. Справочная информация: я сделал js, но я новичок в AMD или мне требуется JS.

Вот уменьшенная версия библиотеки, сохраняя только формат:

(function (global, factory) {
if ( typeof exports === 'object' && typeof module !== 'undefined'){ 
    factory(exports);
}
else if (typeof define === 'function' && define.amd){ 
    define(['exports'], factory);
}
else{
    global['SimpleMath'] = factory({}); 
}}(typeof global !== "undefined" ? global : self.window || self.global, 
(function (exports) {

'use strict';

exports.square = function square(value){
    return value * value;
}

exports['square'] = exports.square;

return exports;})));

Внутри основного. html у нас есть

requirejs(['./libs/SimpleMath'], function (smath){
        console.log(smath);
        console.log(require.s.contexts._.defined);
    });

Это работает, и мы можно увидеть распечатанный загруженный объект.

Поскольку мы оптимизируем / запутываем код sh, мы пытаемся потребовать js 'оптимизатор (один файл js):

node ../../r.js -o name=SimpleMath out=SimpleMath.min.js baseUrl=.

И мы получаем нечто, похожее на уменьшенный файл. Однако, если сейчас я попытаюсь загрузить минимизированную версию тем же способом:

requirejs(['./libs/SimpleMath.min'], function (smath){
        console.log(smath);
        console.log(require.s.contexts._.defined);
    });

вместо распечатки мы получим 'undefined'.

Я не могу сказать, оригинал ли код был неправильным, или мы не используем оптимизатор правильно, или мы полностью неправильно поняли концепцию. Любая помощь или указатели высоко ценится. Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2020

Ответьте себе, если кто-то может найти это полезным: минимизированный файл экспортировал названный модуль, подобный этому

define('SimpleMath',['exports'],t)..

нам пришлось либо

  1. загрузить его в качестве именованного модуля с require.config или

  2. сделать его анонимным, что представляется рекомендуемым вариантом для нашего случая.

...