Внешние веб-пакеты и пользовательские пакеты - PullRequest
1 голос
/ 24 апреля 2019

Предварительно, я хочу признать, что это мое первое погружение в веб-пакет на любой глубине, и я мог упустить что-то очевидное.

Я занимаюсь разработкой node JS сценария, который работает как агент дляпредоставлять функции и данные клиентскому приложению HTML5 / JS в моей целевой среде.Часть API предоставляется в node_modules целевой среды во время выполнения, а не во время сборки.В своем коде я предоставляю ему const phoenix = require('@phoenix/apis/dist/index');

Запущенный веб-пакет, все в порядке, но когда я пытаюсь запустить скрипт, я сталкиваюсь с:

Неверный или неожиданный токенat Object. @ phoenix / apis / dist / index (/home/path/node_modules/AgendaWeb_0.0.1/main.js:2312:1)

Это имеет смысл, поскольку веб-пакет превращает те, которые требуют вthis:

eval("module.exports = @phoenix/apis/dist/index;\n\n//# sourceURL=webpack:///external_%22@phoenix/apis/dist/index%22?");

И @phoenix не будет допустимым именем модуля / объекта для работы.

Мне в основном нужен веб-пакет, чтобы просто оставить запрос в одиночестве (я не знаю, имеет ли это смысл в контексте пакетирования), чтобы экземпляр узла мог ввести модуль в среду, в которой он работает.

Вот мой конфиг веб-пакета:

module.exports = {
entry: {
      main: './src/agendaAgent'
  },
  output: {
      path: path.resolve(__dirname, './prod/')
},
externals: /@phoenix/,
target: 'node',
plugins: [
    new CleanWebpackPlugin(),
    new CopyPlugin([{from:'./manifest.json', to:'./'}]),
    new webpack.DefinePlugin({ 'global.GENTLY': false })
    ]
};

Я ожидаю, что есть способ включить внешний модуль, на который будет ссылаться во время выполнения (в каталоге node_modules/@phoenix - так оно и есть в настоящее время).работает вне упакованного кода)

До сих пор я пытался использовать внешние (как указано выше) и пытался использовать resol.alias, чтобы дать ему прямой путь к библиотекам (это не очень хорошее решение, так какмодуль не является частью среды разработки - я тоже не работал).Я также пытался использовать IgnorePlugin, но если я правильно его понимаю, он только препятствует созданию соответствующего модуля.

Любая помощь или руководство приветствуются.

1 Ответ

0 голосов
/ 03 мая 2019

Поработав с этим довольно долго, я наткнулся на ответ.Это не прописано четко, но следующее изменение конфигурации позволило веб-пакету правильно все связать:

    output: {
          path: path.resolve(__dirname, './prod/'),
          libraryTarget: 'umd'
    }

Соответствующее изменение - libraryTarget: 'umd', которое заставляет веб-пакет объединять ваш модуль в commonJS, AMD и Global.Критическим моментом здесь является то, что webpack не пытается представить модуль как свойство объекта.Вероятно, есть и другие значения libraryTarget, которые приведут к успешному выводу, но пока это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...