node.js - كيف يمكن تشغيل ملفات TypeScript من سطر الأوامر؟


أجد صعوبة كبيرة بشكل مفاجئ في العثور على إجابة لهذا. مع Node.JS العادي، يمكنك تشغيل أي ملف js باستخدام node path/to/file.js، مع CoffeeScript يكون coffee hello.coffee و ES6 لديك babel-node hello.js. كيف أفعل الشيء نفسه مع Typescript؟

مشروعي يحتوي على tsconfig.json والذي يُستخدم بواسطة Webpack/ts-loader لبناء حزمة صغيرة وجميلة للمتصفح. ومع ذلك، لدي حاجة لخطوة بناء تُشغَّل من وحدة التحكم قبل ذلك، والتي ستستخدم بعض ملفات .ts المستخدمة في المشروع لإنشاء مخطط، لكن يبدو أنني لا أستطيع تشغيل ملف Typescript واحد دون تجميع المشروع بأكمله.

الإجابة رقم 1

يمكنك ترك tsc قيد التشغيل في وضع المراقبة باستخدام tsc -w -p . وسوف يقوم بإنشاء ملفات .js لك بطريقة مباشرة، بحيث يمكنك تشغيل node foo.js كالمعتاد.

لتشغيل ملف TypeScript واحد دون تجميع المشروع بأكمله، هناك ts-node الذي سيقوم بتجميع الكود في الوقت الفعلي وتشغيله عبر Node:

npx ts-node src/foo.ts

الإجابة رقم 2

قم بتشغيل الأوامر أدناه وتثبيت الحزم المطلوبة على مستوى النظام:

npm install -g ts-node typescript '@types/node'

الآن نفذ الأمر التالي لتشغيل ملف تايبسكريبت:

ts-node typescript-file.ts

الإجابة رقم 3

يمكنك أيضًا تجربة tsx. tsx هو أمر CLI (بديل لـ node) لتشغيل TypeScript بسلاسة، وهو مبني على esbuild لذا فهو سريع جدًا.

https://github.com/esbuild-kit/tsx

مثال :

npx tsx ./script.ts

الإجابة رقم 4

لدينا الخطوات التالية:

  1. أولاً تحتاج إلى تثبيت تايبسكريبت

    npm install -g typescript
    
  2. أنشئ ملفًا واحدًا helloworld.ts

    function hello(person){
       return "Hello, " + person;
    }
    let user = "Aamod Tiwari";
    const result = hello(user);
    console.log("Result", result)
    
  3. افتح موجه الأوامر واكتب الأمر التالي

    tsc helloworld.ts
    
  4. قم بتشغيل الأمر مرة أخرى

    node helloworld.js
    
  5. سيتم عرض النتيجة على وحدة التحكم

الإجابة رقم 5

لإضافة إلى إجابة @Aamod أعلاه، إذا كنت تريد استخدام سطر أوامر واحد لتجميع وتشغيل الشيفرة الخاصة بك، يمكنك استخدام ما يلي:

ويندوز :

tsc main.ts | node main.js

لينكس/ماك أو إس:

tsc main.ts && node main.js

الإجابة رقم 6

لقد أنشأت @digitak/esrun، وهو غلاف خفيف حول esbuild وينفذ ملف TypeScript تقريبًا على الفور. تم إنشاء esrun لأنني شعرت بخيبة أمل من ts-node: بطيء جدًا، ولم يكن يعمل معظم الوقت.

تشمل مزايا esrun مقارنة بـ ts-node:

  • سريع جداً (يستخدم esbuild)،
  • يمكن استيراد ESM وكذلك CJS (فقط استخدم المكتبات التي تختارها وesrun سيعمل مباشرةً)،
  • هناك وضع مشاهدة مدمج، قم بتشغيل البرنامج النصي الخاص بك باستخدام الخيار --watch وأي تغيير في ملف الدخول الخاص بك أو أي من تابعياته سيعيد تشغيل النتيجة
  • يمكنك استخدام esrun في وضع الفحص لاستخدام وحدة تحكم DevTools بدلاً من وحدة تحكم الطرفية الخاصة بك.

بعد التثبيت، فقط شغّل:

npx @digitak/esrun file.ts

الإجابة رقم 7

تحرير: مايو 2022

الآن لدى ts-node علم --esm، استخدمه.

الإجابة القديمة:

لا تتناول أي من الإجابات الأخرى كيفية تشغيل نص TypeScript يستخدم الوحدات، وخاصة وحدات ES الحديثة.

أولاً، لا يعمل ts-node في هذا السيناريو، اعتباراً من مارس 2020. لذلك سنكتفي بـ tsc متبوعاً بـ node.

ثانياً، لا يزال TypeScript غير قادر على إخراج ملفات .mjs. لذلك سنلتزم بملفات .js و"type": "module" في package.json.

ثالثًا، تريد أسطر import نظيفة، دون تحديد امتداد .js (والذي قد يكون مربكًا في ملفات .ts):

import { Lib } from './Lib';

حسنًا، هذا ليس بالأمر البسيط. تتطلب Node تحديد الامتدادات عند الاستيراد، ما لم تستخدم العلم experimental-specifier-resolution=node. في هذه الحالة، سيمكن ذلك Node من البحث عن Lib.js أو Lib/index.js عندما تحدد فقط ./Lib في سطر import.

رابعًا، لا يزال هناك عقبة: إذا كان لديك اسم ملف main مختلف عن index.js في حزمتك، فلن يتمكن Node من العثور عليه.

التحويل البرمجي يجعل الأمور أكثر فوضوية بكثير مقارنة بتشغيل Node العادي.

إليك مستودعًا نموذجيًا به هيكل مشروع TypeScript حديث، يولد كود وحدة ES.

الإجابة رقم 8

مجرد معلومات مفيدة - إليك أحدث بيئة تشغيل TypeScript/JavaScript دنو.

تم إنشاؤه بواسطة مبتكر نود رايان دال، بناءً على ما كان سيفعله بشكل مختلف إذا كان بإمكانه البدء من جديد.

الإجابة رقم 9

استخدم الخبز المحمص.

إنه أسرع ويحتوي على الكثير من الأدوات المدمجة.

bun run ./my-script.ts

الإجابة رقم 10

اعتبارًا من مايو 2022، ts-node يدعم وحدات es

npx ts-node --esm file.ts

من المحتمل أنك ستحتاج إلى إضافة "type": "module", إلى package.json الخاص بك. وقد تكون بعض الاستدعاءات غير صحيحة إلا إذا قمت بتشغيل experimental-specifier-resolution=node

npmjs.com/package/ts-node#commonjs-vs-native-ecmascript-modules

الإجابة رقم 11

بالنسبة لـ Linux/Mac يمكنك إضافة الـ ts-node-script shebang.

قم بتثبيت typescript/ts-node على مستوى النظام (انظر 1 أدناه للتثبيت غير العالمي):

npm install ts-node typescript --save-dev --global

أضف هذا كسطر أول في ملف .ts الخاص بك:

#!/usr/bin/env ts-node-script

ثم اجعل الملف قابلاً للتنفيذ:

chmod +x ./your-file.ts

يمكنك بعد ذلك تشغيل الملف مباشرة من سطر الأوامر:

./your-file.ts

ملاحظات :

1 للتثبيت غير العالمي يمكنك التثبيت محليًا في مشروعك

npm install ts-node typescript --save-dev

وأضف المسار النسبي إلى برنامج الشيبانغ على سبيل المثال:

#!/usr/bin/env ./node_modules/.bin/ts-node-script

2 تم إضافة دعم shebangs رسميًا في ts-node الإصدار 8.9.0.