问题描述
我有一个带有 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,但我想您也可以尝试使用该库。