“在‘​​@zxing/browser’中找不到导出‘BrowserMultiFormatReader’

问题描述

我有一个带有 webpacker 的 rails 项目,我使用 "@zxing/library": "^0.17.1" 来扫描条形码,但由于他们发布了一个新库 "@zxing/browser",所以我正在尝试升级到它。所以我已将此添加package.json:

        "@zxing/browser": "^0.0.5","@zxing/library": "^0.18.3",

并尝试在 js 文件中像这样使用它:

import { browserMultiFormatReader } from "@zxing/browser";
var a = new browserMultiFormatReader();

但是当 webpacker 编译它时,终端控制台出现错误

ERROR in ./app/assets_js/xyz.js 2:12-36
"export 'browserMultiFormatReader' was not found in '@zxing/browser'

并在浏览器控制台上显示

Uncaught TypeError: _zxing_browser__WEBPACK_IMPORTED_MODULE_0__.browserMultiFormatReader is not a constructor

该库以前在 0.17.1 版本上工作,其中有类似的文件,不确定我在这里做错了什么。

我尝试过认导入,但没有奏效。我尝试添加 ts-loader 或 babel-typescript 库,但这也不起作用。实际上,就像以前一样,我认为不需要添加任何新库来转译库代码

图书馆:

在 vscode 中,如果我按 ctrl + 单击导入 (@zxing/browser) 然后我在 index.d.ts 中获得此代码

export { BarcodeFormat } from '@zxing/library';
export * from './common/HTMLCanvasElementluminanceSource';
export * from './common/HTMLVisualMediaElement';
export * from './common/IScannerControls';
export * from './readers/browserAztecCodeReader';
export * from './readers/browserMultiFormatOneDReader';
export * from './readers/browserCodeReader';
export * from './readers/browserDatamatrixCodeReader';
export * from './readers/browserMultiFormatReader';
export * from './readers/browserPDF417Reader';
export * from './readers/browserQRCodeReader';
export * from './readers/IbrowserCodeReaderOptions';
export * from './writers/browserCodeSvgWriter';
export * from './writers/browserQRCodeSvgWriter';

这是@zxing/browser/esm/readers/browserMultiFormatReader.d.ts文件中的代码

import { BarcodeFormat,BinaryBitmap,DecodeHintType,MultiFormatReader,Result } from '@zxing/library';
import { browserCodeReader } from './browserCodeReader';
import { IbrowserCodeReaderOptions } from './IbrowserCodeReaderOptions';
export declare class browserMultiFormatReader extends browserCodeReader {
    set possibleFormats(formats: BarcodeFormat[]);
    protected readonly reader: MultiFormatReader;
    constructor(hints?: Map<DecodeHintType,any>,options?: IbrowserCodeReaderOptions);
    /**
     * Overwrite decodeBitmap to call decodeWithState,which will pay
     * attention to the hints set in the constructor function
     */
    decodeBitmap(binaryBitmap: BinaryBitmap): Result;
    /**
     * Allows to change hints in runtime.
     */
    setHints(hints: Map<DecodeHintType,any>): void;
}

如果这有助于以某种方式指出我的错误

解决方法

尝试从“@zxing/library/esm”而不是“@zxing/library/”导入 你也可以试试'@zxing/library/es2015'

我遇到了同样的问题,在 0.17.1 上工作正常,但在更新到 0.18+ 时中断,这些更改都解决了我的问题。我决定保留 es2015 一个,因为它对我来说似乎更现代。我认为他们在 0.18+ 中引入了这一重大变化,而没有在文档中引用它。

我不使用@zxing/browser,但我想您也可以尝试使用该库。