Как заставить веб-пакет загружать библиотеку, используя метод «Браузер»? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь перенести устаревший проект, который использует bower и usemin, на webpack 4. Для первого шага я хочу просто создать пакет всего кода JavaScript.Для этого я создал index.js, где я размещаю все сценарии в этой форме

window.moment = require('./bower_components/moment/moment.js');
require('imports-loader?define=>false,this=>window!' +
    './bower_components/moment-timezone/builds/moment-timezone-with-data-2010-2020.js');

Я использую загрузчики импорта и экспорта для устаревших библиотек.Мои проблемы в том, что некоторые библиотеки пытаются загрузить / импортировать зависимости, подобные этой

(function (root, factory) {
    "use strict";

    /*global define*/
    if (typeof define === 'function' && define.amd) {
        define(['moment'], factory);                 // AMD
    } else if (typeof exports === 'object') {
        module.exports = factory(require('moment')); // Node
    } else {
        factory(root.moment);                        // Browser
    }
}(this, function (moment) {
...
}

Когда webpack пытается загрузить такую ​​библиотеку, второе предложение if дает true, а webpack пытается загрузить зависимость с помощью оператора require().

Использование imports-loader?define=>false Я могу заставить библиотеку не пробовать метод AMD.Но я не могу понять, как пропустить метод, который использует require().Я пытался использовать imports-loader?define=>false,exports=>false, но он не работает.

Можно ли отключить метод Node?Например, установите экспорт на false.

Я также попытался использовать опцию resolve.alias: {'libname', 'path/to/lib'} в конфигурации веб-пакета.Но этот путь в некоторых случаях приводит к ситуации, когда webpack пытается импортировать зависимость два или более раз, и это нарушает код.

1 Ответ

0 голосов
/ 18 апреля 2019

Вы должны установить exports на false:

require('imports-loader?define=>false,exports=>false,this=>window!' +
    './bower_components/moment-timezone/builds/moment-timezone-with-data-2010-2020.js');

Это должно сделать условие typeof exports === 'object' ложным.

...