是否可以使用 parceljs 将 EaselJS (CreateJS) 与 TypeScript 一起使用?

Is it possible to use EaselJS (CreateJS) with TypeScript using parceljs?

我正在尝试使用 EaselJS 制作游戏,由于是 [当年],我正在使用 TypeScript。我使用 “官方” 类型 here,但我无法将其与 parceljs 一起使用。如果我导入类型,包裹会失败。如果我在没有类型的情况下导入,parcel 很高兴(并且我的构建有效),但我在 VS Code 中没有类型。

这是我的导入,适用于 parcel 构建:

import * as createjs from '@createjs/easeljs';

VS Code 在此行抛出信息警告,指出 Could not find a declaration file for module '@createjs/easeljs'.,并且类型不起作用。

这是一个让 VS Code 开心的导入,但包裹却很伤心:

import 'createjs';

现在 EaselJS 的类型可以在 VS Code 中使用,但是 parcel 构建失败 src/main.ts:3:8: Cannot resolve dependency 'createjs'。不酷!

这是我的 package.json:

{
  "name": "corona-coaster",
  "version": "0.1.0",
  "license": "GPL-3.0-only",
  "dependencies": {
    "@createjs/easeljs": "^2.0.0-beta.4",
    "createjs": "^1.0.1",
    "sty": "^0.6.1"
  },
  "devDependencies": {
    "@testing-library/jest-dom": "^5.11.0",
    "@types/createjs": "^0.0.29",
    "@types/easeljs": "^1.0.0",
    "@types/jest": "^26.0.4",
    "@types/tweenjs": "^1.0.1",
    "jest": "^26.1.0",
    "jest-extended": "^0.11.5",
    "parcel-bundler": "^1.12.4",
    "sass": "^1.26.10",
    "ts-jest": "^26.1.1",
    "typescript": "^3.9.6"
  },
  "scripts": {
    "start": "parcel index.html",
    "build": "parcel build index.html --public-url ./",
    "test": "jest"
  },
  "jest": {
    "preset": "ts-jest",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js"
    ],
    "setupFilesAfterEnv": [
      "<rootDir>/testSetup.ts"
    ]
  }
}

还有我的 tsconfig:

{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "~/*": [
        "./*"
      ]
    },
    "typeRoots": [
      "node_modules/@types"
    ]
  }
}

GitHub 回购是 here。我无法切换到 webpack。

我找到了解决方法。请改用 createjs-module 包,并将其用作导入语句:

import * as createjs from 'createjs-module';

恭喜!斗争现在结束了。不需要在 tsconfig 中做任何特殊的事情,也不需要自己包含类型——它们包含在 createjs-module 中。整洁!

归功于 this comment

为了一些供应,我最近找到了一些令人兴奋的工作。 现在@thegraid/createjs-module更新为createjs 1.0.0,解决了很多问题 https://www.npmjs.com/package/@thegraid/createjs-module

npm install --save @types/createjs
npm install --save @thegraid/createjs-module
import * as createjs from '@thegraid/createjs-module';