Запуск TypeScript Mocha с модулем es6 - PullRequest
0 голосов
/ 22 апреля 2020

Я хотел установить несколько тестов мокко для приложения TypeScript моего приложения Rails. Я добавил один глупый тест, чтобы начать. Но я продолжаю получать эту ошибку:

/home/bernhard/Programs/ruby/cube_trainer/jstests/utils/optional.spec.ts:1
import { some, none, mapOptional, forceValue, hasValue, checkNone } from '../../app/javascript/cube_trainer/app/utils/optional';
^^^^^^

SyntaxError: Cannot use import statement outside a module
...stacktrace...
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Я понял методом проб и ошибок, что строка "module": "es6" в tsconfig. json, кажется, вызывает это. Если я изменяю его на "module": "commonjs", мой тест запускается и проходит. Тем не менее, мое приложение rails перестает работать, если я это делаю.

Я считаю, что эта проблема решена, если я выполню одно из следующих действий: * Сделайте так, чтобы мое приложение Rails работало с опцией "module": "commonjs". * Заставить мои тесты работать с "module": "es6" * мне удается использовать другой tsconfig для mocha (но я рассмотрел бы эту опцию, только если бы я мог включить существующий tsconfig и изменить только эту одну опцию вместо копирования всего файла)

Кстати, у меня нет глубокого понимания всех этих параметров конфигурации, я просто копирую вставленные данные вместе, пока они не сработают. Так что если что-то в моих конфигах глупо, не стесняйтесь указывать на это. Единственное, что я сделал преднамеренно, это то, что я сделал TypeScript максимально строгим, насколько это было возможно, без ущерба для вещей, которые находятся вне моего контроля.

Важные файлы для справки

полное репо здесь: https://github.com/Lykos/cube_trainer README содержит инструкции по установке (если у вас уже настроены postgresql, пряжа и ruby, все должно быть просто)

tsconfig. json

{
  "compilerOptions": {
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
      "lib": ["dom", "es2017"],
    "module": "es6",
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
        "*": ["node_modules/*", "app/javascript/*"]
    },
    "sourceMap": true,
    "target": "es6",
    "removeComments": false,
    "strict": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "noImplicitThis": true,
    "noImplicitReturns": true
  },
  "exclude": [
    "**/*.spec.ts",
    "node_modules",
    "vendor",
    "public"
  ],
  "compileOnSave": false
}

Обратите внимание, что мой tsconfig возник из того, что предоставляет Rails. Смотрите здесь:

https://github.com/rails/webpacker/blob/master/lib/install/examples/typescript/tsconfig.json

Я изменил "lib": ["es6", "dom"], на "lib": ["dom", "es2017"],, чтобы исправить проблему, я изменил цель на es6 и добавил несколько больше опций, чтобы сделать TypeScript более строгим.

Я не знаю, имеют ли вообще смысл эти опции, но я с трудом пытался заставить мое приложение работать с Rails и TS и без этих опций.

пакет. json

{
  "name": "cube_trainer",
  "private": true,
  "dependencies": {
    "@angular/animations": "^9.0.0",
    "@angular/cdk": "^9.2.0",
    "@angular/common": "^9.1.0",
    "@angular/compiler": "^9.1.0",
    "@angular/core": "^9.1.0",
    "@angular/forms": "^9.1.0",
    "@angular/material": "^9.2.0",
    "@angular/platform-browser": "^9.1.0",
    "@angular/platform-browser-dynamic": "^9.1.0",
    "@angular/router": "^9.1.0",
    "@rails/actioncable": "^6.0.0",
    "@rails/activestorage": "^6.0.0",
    "@rails/ujs": "^6.0.0",
    "@rails/webpacker": "5.0.1",
    "@rxweb/reactive-form-validators": "^1.9.9-beta4",
    "angular-new-router": "angular/router",
    "core-js": "^3.6.4",
    "es6-shim": "^0.35.0",
    "html-loader": "^1.0.0",
    "http-methods-enum": "^0.1.1",
    "jquery": "^3.4.1",
    "material-design-icons": "^3.0.1",
    "rails-ujs": "^5.2.4-2",
    "reflect-metadata": "0.1.2",
    "rxjs": "^6.5.3",
    "snake-case-typescript": "^0.0.2",
    "ts-loader": "^6.2.2",
    "tslib": "^1.10.0",
    "turbolinks": "^5.2.0",
    "typescript": "^3.8.3",
    "webpack": "^4.42.1",
    "zone.js": "~0.10.2"
  },
  "author": "Bernhard F. Brodowsky",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/Lykos/cube_trainer.git"
  },
  "scripts": {
    "test": "mocha -r ts-node/register jstests/**/*.spec.ts"
  },
  "version": "0.1.0",
  "devDependencies": {
    "@types/chai": "^4.2.11",
    "@types/mocha": "^7.0.2",
    "@types/node": "^12.12.31",
    "chai": "^4.2.0",
    "mocha": "^7.1.1",
    "ts-node": "^8.9.0",
    "webpack-dev-server": "^3.10.3"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...