Requiring a JavaScript Node.js module in TypeScript (allowJs' is not set)
Asked Answered
S

1

20

I have an Angular2 app inside Electron. Now, I would like to use the @pokusew/pcsclite library to use NFC functionality. This library uses native Node.js modules.

When I try to require the library in my component.ts like this:

declare var pcsclite: any;
var pcsclite = require('../../../node_modules/@pokusew/pcsclite/');

I get and error that says:

error TS6143: Module '../..' was resolved to '../../lib/pcsclite.js', but '--allowJs' is not set.

On the other hand, if I try to import the library via a <\script>-Tag in the index.html I get an error that says:

ZoneAwareError Error: Could not locate the bindings file. Tried:...

Finally, if I var pcsclite = require('@pokusew/pcsclite'); in the main.js, then it works, but then I don't have access to it from inside my Angular app.

Sixteenth answered 17/3, 2017 at 21:56 Comment(0)
N
32

Add the allowJs option in your tsconfig.json like this:
as fabian lauer said also add outDir option to specify where your compiled files will be:

{
    "compilerOptions": {
        "outDir": "./built", <--- add this
        "allowJs": true,  <--- and this
        "target": "es5"
    },
    "include": [
        "./src/**/*"
    ]
}
Niemi answered 17/3, 2017 at 22:14 Comment(6)
Unfortunately, then I get other errors for each of my .js files. "error TS5055: Cannot write file '...components.js' because it would overwrite input file"Sixteenth
@Sixteenth That's probably because you either didn't set "outDir" or you set the "outDir" in tsconfig.json to the same directory as the source files.Yeti
Ok, I set up the whole project again with Angular CLI to avoid these kind of problems. Using allowJs I am now able to import the module using import * as pcsclite from ".../node_modules/...", but when I try to use it const pcsc = pcsclite(); I get this error in the console: TypeError: exists is not a function(vendor.bundle.js) and some warnings regarding bindings.js when compiling.Sixteenth
i can't use pcsclite becaue Im on windows, try import * as pcsclite from "pcsclite"; or import {} from "pcsclite";Niemi
@Sixteenth Since your original question has been answered, you could accept this answer as the correct one ;-)Yeti
@Fabian Lauer, yes, instead I will open a new problem for the specific problem that appears now. And thanks to both of you for your help!Sixteenth

© 2022 - 2024 — McMap. All rights reserved.