Сохранение nedb на диск в процессе рендеринга Electron (проблема конфигурации Webpack / Electron / nedb)

Проблема не в платформе (amd64), а в драйверах графических процессоров. Вам необходимо либо установить пакеты, которые запускаются на CPU, либо использовать те GPU, которые вы уже установили, но также установить драйверы CUDA.

4
задан customcommander 5 April 2019 в 19:43
поделиться

1 ответ

Как вы указали в своем вопросе и в этом выпуске Github в пакете nedb, основная причина вашей проблемы заключается в том, что процесс разрешения файла в веб-пакете читает ключ package.browser для того, чтобы псевдоним конкретного файла пути к другому местоположению, когда сборка target равна browser или другому значению, которое заставит его проверить свойство package.browser.

electron-vue, кажется, обходит проблему связывания веб-пакетов , рассматривая все зависимости NPM как externals , чтобы они не попадали в комплект приложений и вместо этого ожидались быть определенным на global некоторыми другими средствами. Вы можете аналогичным образом обозначить nedb как внешнее в конфигурации вашего веб-пакета и вставить версию Node в свое приложение с помощью тега script или определить ссылку на него в global другим способом.

Другим решением было бы создать плагин распознавателя веб-пакетов для переопределения способа разрешения проблемных требований для "./lib/customUtils.js" и "./lib/storage.js", минуя этап разрешения, который проверяет package.browser на наличие псевдонимов для этих путей к файлам.

См. Документацию веб-пакета для , как передать пользовательский плагин распознавателя в конфигурацию вашего Webpack. См. Документацию wepback/enhanced-resolve для получения дополнительной информации о , как определяются плагины и как они работают.

По сути, плагин - это объект с методом apply, который принимает экземпляр resolver и выполняет некоторый этап процесса разрешения файла. В приведенном ниже примере мы проверяем, находится ли текущий разрешаемый файл в пакете nedb и является ли он одним из двух проблемных псевдонимов браузера. Если это так, мы выходим из процесса разрешения с правильными путями к файлам. В противном случае мы ничего не делаем и откладываем нормальный процесс разрешения.

// Prevents nedb from substituting browser storage when running from the
// Electron renderer thread.
const fixNedbForElectronRenderer = {
  apply(resolver) {
    resolver
      // Plug in after the description file (package.json) has been
      // identified for the import, which makes sure we're not getting
      // mixed up with a different package.
      .getHook("beforeDescribed-relative")
      .tapAsync(
        "FixNedbForElectronRenderer",
        (request, resolveContext, callback) => {
          // When a require/import matches the target files, we
          // short-circuit the Webpack resolution process by calling the
          // callback with the finalized request object -- meaning that
          // the `path` is pointing at the file that should be imported.
          const isNedbImport = request.descriptionFileData["name"] === "nedb"

          if (isNedbImport && /storage(\.js)?/.test(request.path)) {
            const newRequest = Object.assign({}, request, {
              path: resolver.join(
                request.descriptionFileRoot,
                "lib/storage.js"
              )
            })
            callback(null, newRequest)
          } else if (
            isNedbImport &&
            /customUtils(\.js)?/.test(request.path)
          ) {
            const newRequest = Object.assign({}, request, {
              path: resolver.join(
                request.descriptionFileRoot,
                "lib/customUtils.js"
              )
            })
            callback(null, newRequest)
          } else {
            // Calling `callback` with no parameters proceeds with the
            // normal resolution process.
            return callback()
          }
        }
      )
  }
}

// Register the resolver plugin in the webpack config
const config = {
  resolve: {
    plugins: [fixNedbForElectronRenderer]
  }
}
0
ответ дан jeebay 5 April 2019 в 19:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: