esbuild не работает без установленной посылки

Проект, использующий esbuild, терпит неудачу следующим образом...

node_modules/htmlparser2/lib/Parser.js:133:36: error: Could not resolve "events" (set platform to "node" when building for node)
require("inherits")(Parser, require("events").EventEmitter);
                                    ~~~~~~~~
1 error
Error: Build failed with 1 error:
node_modules/htmlparser2/lib/Parser.js:133:36: error: Could not resolve "events" (set platform to "node" when building for node)
    at failureErrorWithLog (/Volumes/DUMBLEDORE1/Users/fficnar/Projects/Shared Projects/mablung-virtual-pug/node_modules/esbuild/lib/main.js:640:15)
    at /Volumes/DUMBLEDORE1/Users/fficnar/Projects/Shared Projects/mablung-virtual-pug/node_modules/esbuild/lib/main.js:504:31
    at handleIncomingPacket (/Volumes/DUMBLEDORE1/Users/fficnar/Projects/Shared Projects/mablung-virtual-pug/node_modules/esbuild/lib/main.js:486:9)
    at Socket.readFromStdout (/Volumes/DUMBLEDORE1/Users/fficnar/Projects/Shared Projects/mablung-virtual-pug/node_modules/esbuild/lib/main.js:429:7)
    at Socket.emit (events.js:314:20)
    at addChunk (_stream_readable.js:303:12)
    at readableAddChunk (_stream_readable.js:279:9)
    at Socket.Readable.push (_stream_readable.js:218:10)
    at Pipe.onStreamRead (internal/stream_base_commons.js:188:23) {
  errors: [
    {
      location: [Object],
      text: 'Could not resolve "events" (set platform to "node" when building for node)'
    }
  ],
  warnings: []
}

... но если посылка установлена ​​...

npm install --save-dev parcel-bundler

... это удается.

Тест...

import '@virtualpatterns/mablung-source-map-support/install'
import _Bundler from 'esbuild'
import Path from 'path'

const { 'build': Bundle } = _Bundler
const FilePath = __filePath
const Require = __require

async function main() {

  try {

    await Bundle({
      'entryPoints': [ Require.resolve('../library/utility.js') ],
      'outfile': `process/esbuild${Path.extname(FilePath)}`,
      'minify': false,
      'bundle': true
    })
    
  } catch (error) {
    console.error(error)
  }

}

main()

... но я также попытался запустить следующее из командной строки с той же ошибкой (без трассировки стека) ...

esbuild distributable-esmodule/library/utility.js --bundle --outdir=process/esbuild --sourcemap --platform=browser --log-level=info --strict
node_modules/htmlparser2/lib/Parser.js:133:36: error: Could not resolve "events" (set platform to "node" when building for node)
require("inherits")(Parser, require("events").EventEmitter);
                                    ~~~~~~~~
1 error

Обидный require("events") исходит из html-to-vdom. Мой файл utility.js небольшой и содержит следующие файлы импорта...

import _ConvertToVirtualNode from 'html-to-vdom'
import CreateVirtualNode from 'virtual-dom/h.js'
import VirtualNode from 'virtual-dom/vnode/vnode.js'
import VirtualText from 'virtual-dom/vnode/vtext.js'

Я использую esbuild v0.7.19. Помогите. Что еще я должен предоставить?

1 ответ

Решение

Поскольку в сообщении об ошибке говорится set platform to "node" when building for node, Я предполагаю, что, поскольку вы этого не сделали, это означает, что вы собираете пакет для браузера, а не для узла. В events пакет встроен в узел, но не встроен в браузер.

Это выглядит как parcel-bundler зависит от node-libs-browser что зависит от crypto-browserify что зависит от events. Это объясняет, почему установка Parcel исправляет эту ошибку. Если ваш проект должен зависеть от eventsпакет (https://www.npmjs.com/package/events), вы должны установить его самостоятельно, чтобы он стал частью вашего проекта:

npm install events
Другие вопросы по тегам