Home > Mobile >  npm Typescript: Cannot use import statement outside a module
npm Typescript: Cannot use import statement outside a module

Time:03-08

I wrote a package and published it to npm. The package starts with

import * as aws from "@pulumi/aws";
import * as pulumi from "@pulumi/pulumi";

export interface ...
export class controlplaneDependencies extends pulumi.ComponentResource {
...

The publishing and installation works fine. When I try to run the code from a different index.ts, it fails with the error

import * as aws from "@pulumi/aws";
    ^^^^^^
    
    SyntaxError: Cannot use import statement outside a module
        at compileFunction (<anonymous>)
        at Object.compileFunction (node:vm:353:18)
        at wrapSafe (node:internal/modules/cjs/loader:1039:15)
        at Module._compile (node:internal/modules/cjs/loader:1073:27)
        at Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
        at Object.require.extensions.<computed> [as .ts] (/Users/cinto/public-cloud-operator/tests/aws/node_modules/ts-node/src/index.ts:431:14)
        at Module.load (node:internal/modules/cjs/loader:989:32)
        at Function.Module._load (node:internal/modules/cjs/loader:829:14)
        at Module.require (node:internal/modules/cjs/loader:1013:19)
        at require (node:internal/modules/cjs/helpers:93:18)

This is how I am calling the package

import * as controlplane from "@bb/controlplane";

stackOutput=new controlplane.controlplaneDependencies("Install dependencies", {
       Provider: awsProvider,

I am not sure how to fix this. I tried adding "type": "module", but is still fails.

I also tried

const aws = require( "@hybrid-cloud/aws" )

but then aws cannot be accessed inside the interface.

Any pointers are helpful. Here is the tsconfig.json


{
  "compilerOptions": {
    "strict": true,
    "strictPropertyInitialization": false,
    "target": "ES6",
    "module": "CommonJS",
    "moduleResolution": "Node",
    "sourceMap": true,
    "declaration": true,
    "experimentalDecorators": true,
    "pretty": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitReturns": true,
    "noImplicitAny": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "lib": [
      "es2019",
      "es5",
      "es6",
      "dom",
      "es2015.collection"
    ],
    "outDir": "./bin"
  },
  "exclude": [
    "node_modules"
  ]
}

CodePudding user response:

I added this to package.json and it is working now

"scripts": {
    "build": "tsc",
    "build:typecheck": "tsc --noEmit",
    "lint:check": "eslint src/**/*.ts",
    "lint:fix": "eslint --fix src/**/*.ts"
  },
  "main": "bin/src/index.js"

I also just kept es6 in my lib. Thanks everyone for the help

  • Related