ts- नोड मॉड्यूल आयात और मॉड्यूल परिभाषित मॉड्यूल के साथ टाइपस्क्रिप्ट निष्पादित करता है

Aug 17 2020

मैं टाइपस्क्रिप्ट के माध्यम से डेटाबेस बेस को इनिशियलाइज़ करने की कोशिश करता हूं।

मेरे टीएस की तरह है:

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-नोड द्वारा चलाने का प्रयास करता हूं जैसे:

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)

मैं "type" जोड़ता हूं: package.json फ़ाइल में "मॉड्यूल"।

{
  "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 Aug 17 2020 at 21:54

त्रुटि Warning: To load an ES module, set "type": "module" in the package.json orts-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 हल है।