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.

Phil
  • 578
  • 2
  • 5
  • 15

1 Answers1

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/**/*"
    ]
}
Community
  • 1
  • 1
El houcine bougarfaoui
  • 35,805
  • 9
  • 37
  • 37
  • 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" – Phil Mar 18 '17 at 06:25
  • 1
    @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. – Fabian Lauer Mar 18 '17 at 09:25
  • 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. – Phil Mar 18 '17 at 11:24
  • i can't use `pcsclite` becaue Im on windows, try `import * as pcsclite from "pcsclite";` or `import {} from "pcsclite";` – El houcine bougarfaoui Mar 18 '17 at 11:40
  • @Phil Since your original question has been answered, you could accept this answer as the correct one ;-) – Fabian Lauer Mar 18 '17 at 17:00
  • 1
    @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! – Phil Mar 18 '17 at 18:20