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.

1 Answer 1

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/**/*"
    ]
}
Sign up to request clarification or add additional context in comments.

6 Comments

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"
@Phil 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.
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.
i can't use pcsclite becaue Im on windows, try import * as pcsclite from "pcsclite"; or import {} from "pcsclite";
@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!
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.