Невозможно использовать оператор импорта вне модуля при импорте пользовательской библиотеки NPM

#javascript #node.js #typescript #aws-cdk

#javascript #node.js #typescript #aws-cdk

Вопрос:

У меня есть пользовательский модуль, который я написал и загрузил в NPM, который экспортирует класс

В проекте AWS-CDK я устанавливаю эту зависимость и пытаюсь ее импортировать, но при сборке «cdk synth» я получаю следующую ошибку

 Cannot use import statement outside a module
  

Вот package JSON из модуля NPM

   "name": "@organization/cdk-organization-fe",
  "version": "1.0.2",
  "description": "Frontend construct for apps",
  "main": "stack.ts",
  "publishConfig": {
    "access": "restricted"
  },
  "type":"module",
  "scripts": {
    "test": "echo "Error: no test specified" amp;amp; exit 1",
    "tsc": "tsc"
  },
  "author": "me,
  "license": "ISC",
  "dependencies": {
    "@aws-cdk/aws-cloudfront": "^1.73.0",
    "@aws-cdk/aws-s3": "^1.73.0",
    "@aws-cdk/aws-s3-deployment": "^1.73.0",
    "@aws-cdk/aws-certificatemanager": "^1.73.0",
    "@aws-cdk/aws-logs": "^1.73.0",
    "@aws-cdk/aws-lambda": "^1.73.0",
    "@aws-cdk/aws-iam": "^1.73.0",
    "aws-cdk": "^1.73.0",
    "path": "^0.12.7",
    "typescript": "^4.0.5"
  }
}
  

а затем проект CDK с использованием библиотеки:

   "name": "showtix_fe",
  "version": "0.1.0",
  "bin": {
    "showtix_fe": "bin/showtix_fe.js"
  },
  "type": "module",
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk"
  },
  "devDependencies": {
    "@aws-cdk/assert": "1.73.0",
    "@types/jest": "^24.0.22",
    "@types/node": "10.17.5",
    "jest": "^24.9.0",
    "ts-jest": "^24.1.0",
    "aws-cdk": "^1.73.0",
    "ts-node": "^8.1.0",
    "typescript": "~3.7.2"
  },
  "dependencies": {
    "@aws-cdk/core": "^1.73.0",
    "@organization/cdk-organization-fe": "^1.0.2",
    "source-map-support": "^0.5.16"
  }
}
  

пытались добавить type:module в пакет JSON
также пытались добавить это в библиотеку NPM для tsconfig

     "target": "ES2017",                         
    "module": "ESNEXT",   
  

Ответ №1:

Я полагаю, вы хотите, чтобы ваш «main»: в модуле указывал на «stack.js » не файл «.ts». Затем вам нужно обязательно запустить ‘tsc’ перед использованием модуля. Также добавьте «типы»: «stack.d.ts».

Комментарии:

1. Получил работу с этим в TSconfig «CompilerOptions»: { «target»: «ES2018», «module»: «commonjs», также да, пришлось обновить stack.ts до js спасибо!