2015-10-03 3 views
1

Я пытаюсь включить модульную стороннюю библиотеку (PhysicsJS) в свой проект веб-пакета. Эта библиотека совместима с AMD и CommonJS и имеет хорошо сформированные подмодули, к которым я хочу получить доступ. Однако он в основном структурирован для RequireJS через его спецификацию packages в require.config(), поэтому точка входа не является стандартом index.js. Вместо этого точка входа - physicsjs.js.Устранение внешних подмодульных зависимостей в webpack

Другими словами, я не могу понять, как настроить webpack для разрешения как основного файла библиотеки, так и ее подмодулей. Кажется, что если точка входа в библиотеку не index.js, и у нее есть подмодули, вам не повезло, и я просто не могу поверить, что это правильно, поэтому я должен что-то упустить.

Итак, как можно сделать следующие заявления для разрешения?

require('physicsjs'); // entry point 
require('physicsjs/bodies/rectangle'); // submodule 

Я попытался изменения этого конфигурация:

resolve: { 
    modulesDirectories: [ 
     'js/bower_components' 
    ], 
    alias: { 
     'physicsjs': 'PhysicsJS/dist/', 
     // doesn't find physicsjs.js 

     'physicsjs': 'PhysicsJS/dist/physicsjs.js' 
     // doesn't find the submodules 
    } 
}, 

Структура каталогов выглядит примерно так:

+ js 
    - main.js 
    + bower_modules 
    + PhysicsJS 
     + dist 
     - physicsjs.js // module entry point 
     + bodies 
      - rectangle.js // desired submodule 
    + lib 
    - MyModule.js 

Обратите внимание, что PhysicsJS действительно есть Минимизированные версии всей библиотеки, которые я буду использовать, если нет другой альтернативы, но я бы предпочел загрузить только то, что я на самом деле использую.

Кроме того, сами подмодули используют require('physicsjs'), поэтому звонок require('physicsjs/physicsjs') - - не решение.

ответ

1

Решение состоит в том, чтобы объявить псевдоним дважды, сначала как точное совпадение (используя конечный $), а затем снова как обычное совпадение (без привязки $). Поэтому моя конфигурация теперь выглядит примерно так:

resolve: { 
    modulesDirectories: [ 
     'js/bower_components' 
    ], 
    alias: { 
     'physicsjs$': 'PhysicsJS/dist/physicsjs.js', // Exact match 
     'physicsjs': 'PhysicsJS/dist' // and again with a fuzzy match 
    }, 
}, 

 Смежные вопросы

  • Нет связанных вопросов^_^