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

Phil picture Phil · Mar 17, 2017 · Viewed 23.8k times · Source

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.

Answer

El houcine bougarfaoui picture El houcine bougarfaoui · Mar 17, 2017

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/**/*"
    ]
}