ts-node 모듈 가져 오기 및 모듈이 정의 된 typescript 실행
typescript를 통해 데이터베이스 기반을 초기화하려고합니다.
내 ts는 다음과 같습니다.
import { User, UserRole } from '../entity/User';
import crypto from 'crypto';
import {dbManager, pwhash } from '..';
async function inituser()
{
const user = new User();
user.email = '[email protected]';
user.own_organization = []
user.salt = crypto.randomBytes(16).toString('hex');
user.password = pwhash("password", user.salt);
user.role = UserRole.admin;
await dbManager.save(user);
const duser = await dbManager.findOne(User);
return duser;
}
const duser = inituser();
console.log("Loaded users: ", duser);
다음과 같이 ts-node로 스크립트를 실행하려고 할 때 :
npx ts-node db/initializers/inituser.ts
다음에 대한 오류가 있습니다.
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:1167:16)
at Module._compile (internal/modules/cjs/loader.js:1215:27)
at Module.m._compile (/usr/lib/node_modules/ts-node/src/index.ts:858:23)
at Module._extensions..js (internal/modules/cjs/loader.js:1272:10)
at Object.require.extensions.<computed> [as .ts] (/usr/lib/node_modules/ts-node/src/index.ts:861:12)
at Module.load (internal/modules/cjs/loader.js:1100:32)
at Function.Module._load (internal/modules/cjs/loader.js:962:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at main (/usr/lib/node_modules/ts-node/src/bin.ts:227:14)
at Object.<anonymous> (/usr/lib/node_modules/ts-node/src/bin.ts:513:3)
root@MEDAIHILW237:/mnt/c/workgit/projeny# ts-node db/initializers/inituser.ts
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /mnt/c/workgit/projeny/db/initializers/inituser.ts
at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)
at Loader.getFormat (internal/modules/esm/loader.js:101:42)
at Loader.getModuleJob (internal/modules/esm/loader.js:230:31)
at Loader.import (internal/modules/esm/loader.js:164:17)
at Object.loadESM (internal/process/esm_loader.js:68:5)
root@MEDAIHILW237:/mnt/c/workgit/projeny# ts-node db/initializers/inituser
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /mnt/c/workgit/projeny/db/initializers/inituser.ts
at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)
at Loader.getFormat (internal/modules/esm/loader.js:101:42)
at Loader.getModuleJob (internal/modules/esm/loader.js:230:31)
at Loader.import (internal/modules/esm/loader.js:164:17)
at Object.loadESM (internal/process/esm_loader.js:68:5)
package.json 파일에 "type": "module"을 추가합니다.
{
"name": "typescript-test",
"version": "1.0.0",
"type": "module",
...
}
오류를 극복하기 위해
(node:3854) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
답변
1 RafaelEmshoff
이 오류 Warning: To load an ES module, set "type": "module" in the package.json or
는 ts-node의 다음 버그로 인해 발생합니다.https://github.com/TypeStrong/ts-node/issues/935
버그가 닫히고이를 해결하기위한 제안이 있지만 아직 열려 있습니다. https://github.com/TypeStrong/ts-node/issues/1007
나는 필요하지 않습니다 "type": "module"
에 package.json
와 사용하고 "module": "commonjs"
대신 "module": "es6",
에서 tsconfig.json
. 나는 이것을 ts-node 문제 # 1007이 해결 될 때까지 기술 부채로 언급했습니다.