টাইপস্ক্রিপ্টে এনপিএম মডিউলগুলি রচনা করা হচ্ছে


103

আমি আমার প্রথম এনপিএম মডিউলটিতে কাজ করছি। আমি সংক্ষেপে আগে টাইপস্ক্রিপ্ট নিয়ে কাজ করেছি এবং একটি বড় সমস্যা হ'ল অনেক মডিউলের জন্য কোনও সংজ্ঞা ফাইল উপলব্ধ ছিল না। সুতরাং আমি ভেবেছিলাম টাইপ স্ক্রিপ্টে আমার মডিউলটি লিখতে ভাল ধারণা হবে।

তবে এটি করার সর্বোত্তম উপায়ের জন্য আমি কোনও তথ্য খুঁজে পাচ্ছি না। আমি এই সম্পর্কিত প্রশ্নটি পেয়েছি " আমি কি কফিস্ক্রিপ্টে এনপিএম প্যাকেজ লিখতে পারি? " যেখানে লোকেরা কেবল জাভাস্ক্রিপ্ট ফাইলগুলি প্রকাশ করার পরামর্শ দেয়। তবে কফিসিপি ফাইলগুলির বিপরীতে, টাইপ স্ক্রিপ্ট ফাইলগুলি টাইপ স্ক্রিপ্ট অ্যাপ্লিকেশনের মধ্যে ব্যবহার করা যেতে পারে।

কোনও এনপিএম মডিউল প্রকাশের সময় কি টাইপসক্রিপ্ট ফাইলগুলি অন্তর্ভুক্ত করা উচিত, বা আমি কেবল জাভাস্ক্রিপ্ট ফাইলগুলি প্রকাশ করব এবং জেনারেটেড .d.ts ফাইলগুলি সংজ্ঞায়িত টাইপগুলিতে সরবরাহ করব?


2
সহায়ক টিপস: এনপিএম প্রকাশের আগে সিজেএস এবং ইএসএম টার্গেটের সাথে টাইপ সংজ্ঞা নির্ধারণের জন্য আপনাকে টিএস প্রকল্প স্থাপনের মাধ্যমে আপনাকে চালানোর জন্য একটি ব্লগ পোস্ট সহ আমি এই প্রকল্পটি লিখেছিলাম, মোকাবেলা করেছি । এটি node.js এবং ব্রাউজারগুলির সাথে এগিয়ে যাওয়ার সাথে ব্যবহারকে সর্বাধিক করে তুলবে।
স্টাইলে

উত্তর:


84

এখানে টাইপস্ক্রিপ্টে লিখিত একটি নমুনা নোড মডিউল রয়েছে: https://github.com/basarat/ts-npm-module

এখানে একটি নমুনা টাইপস্ক্রিপ্ট প্রকল্প যা এই নমুনা মডিউলটি https://github.com/basarat/ts-npm-module-consume ব্যবহার করে

মূলত আপনার প্রয়োজন:

  • commonjsএবং সাথে সংকলনdeclaration:true
  • একটি .d.tsফাইল তৈরি করুন

এবং তারপর

  • আপনার আদর্শ উত্পন্ন পড়া পড়ুন .d.ts

এটম-টাইপসক্রিপ্টটি কেবল এটির চারপাশে একটি দুর্দান্ত ওয়ার্কফ্লো সরবরাহ করে: https://github.com/TypeStrong/atom-typescript#packagejson-support


অ্যাটম-টাইপসক্রিপ্ট অ্যাঙ্কর লিঙ্কটি আপডেট করা দরকার (অ্যাঙ্কর আর বৈধ নয়)।
ফিদান হাকাজ

@ বাসারত, টিএস-এনপিএম-মডিউলে আপনি "সংস্করণ" ব্যবহার করছেন: "1.5.0-alpha"। আমি ধরে নিই যে এটি আপনি টাইপস্ক্রিপ্টের সংস্করণ দিয়ে প্রতিস্থাপন করছেন। এটাকে ছেড়ে দেওয়া কি ব্যাপার? (এটি অ্যাটম প্লাগইন দ্বারা স্বয়ংক্রিয়ভাবে সম্পন্ন হয় না)। যদি কোনও সংস্করণ ব্যবহার করা হয়, তবে এর জন্য কি অন্য ব্যবহারকারীদের ট্রান্সপ্লাই করার জন্য সঠিক সংস্করণটি ব্যবহার করতে হবে (বা কেবল নতুনতর)? (বা সম্ভবত এটি tsconfig.json এর সংস্করণ?)
জাস্টিন

অন্যান্য লাইব্রেরির উপর নির্ভর করে মডিউলগুলি নিয়ে আপনার কোনও ব্যবহারের মামলা রয়েছে? সদৃশ সংজ্ঞা সমস্যা এড়াতে আপনার কনফিগার করতে হবে tsconfig.jsonতবে এটি আমার মতে খুব ম্যানুয়াল বলে মনে হচ্ছে।
সেরজিও মিশেলস

1
আপনি কি এখনও ২০১৪ এর Q4-এ এই পদ্ধতির পক্ষে করবেন?
সুপারউবারডুপার

7
এটি কীভাবে করা যায় - tsmean.com/articles/how-to-writ-a-typescript-library
ক্রিশমার্ক

78

টাইপস্ক্রিপ্ট ৩.x বা টাইপস্ক্রিপ্ট ২.x সহ, নিম্নলিখিত পদক্ষেপগুলি টাইপস্ক্রিপ্ট সহ একটি লাইব্রেরি (এনপিএম প্যাকেজ) তৈরি করতে আপনার কী করতে হবে তা বর্ণনা করে:

  • আপনার প্রকল্পটি আপনি যেমনটি করেন তেমন তৈরি করুন (পরীক্ষা এবং সমস্ত কিছু সহ)
  • টাইপগুলি উত্পন্ন declaration: trueকরতে যুক্ত করুন tsconfig.json
  • এর মাধ্যমে এপিআই রফতানি করুন index.ts
  • এর মধ্যে package.json, আপনার উত্পন্ন টাইপগুলিকে নির্দেশ করুন। উদাহরণস্বরূপ যদি outDirএটি হয় distতবে "types": "dist/index.d.ts"আপনার প্যাকেজ জসন যুক্ত করুন।
  • package.json, আপনার মূল এন্ট্রি ফাইলের দিকে নির্দেশ করুন। উদাহরণস্বরূপ যদি আপনার outDirহয় distএবং প্রধান এন্ট্রি ফাইল হয় index.js, তবে "main": "dist/index.js"আপনার প্যাকেজ.জসনে যুক্ত করুন।
  • .npmignoreঅপ্রয়োজনীয় ফাইল (যেমন উত্স) উপেক্ষা করার জন্য একটি তৈরি করুন ।
  • সঙ্গে এনপিএম প্রকাশ করুন npm publish। আপডেটের জন্য সেমভার স্পেসিফিকেশন ব্যবহার করুন (প্যাচ / বাগ ফিক্স npm version patch, অ-ব্রেকিং সংযোজন npm version minor, ব্রেকিং এপিআই পরিবর্তনগুলি npm version major)

যেহেতু ইন্টারনেটে এই বিষয়টির সমস্ত পুরানো উত্সগুলি অনুসন্ধান করার জন্য আমার কিছুটা সময় লেগেছে (এই পৃষ্ঠার মতো ...) আমি কীভাবে লিখতে হবে-টাইপ-স্ক্রিপ্ট-লাইব্রেরিতে এটি দিয়ে গুটিয়ে রাখার সিদ্ধান্ত নিয়েছি আপ-টু-ডেট কাজের সর্বনিম্ন উদাহরণ।


আমি কি সোর্স নিয়ন্ত্রণে জেএসগুলি পরীক্ষা করে দেখতে পারি? অথবা এনপিএম কোডটির নিজস্ব সংস্করণ রাখে?
ওলিয়ান04

1
@ ওলিয়ান04 আপনি এনপিএমকে .npmignoreফাইলগুলি প্রকাশ করার সময় কোন ফাইলগুলি উপেক্ষা করবেন তা বলার জন্য একটি ফাইল তৈরি করতে বলছেন ( .tsফাইলগুলি) এবং .gitignoreকোন ফাইলটি উপেক্ষা করতে হবে তা বলতে ( dist/)
পুরাগ

@ ওলিয়ান04 না, আপনার উত্পন্ন জেএস ফাইল / গুলি কমিট করার দরকার নেই (এবং আইএমও করা উচিত নয়)। এগুলি প্রকল্পের উত্সের অংশ নয়।
জোশ এম।

59

এটি টাইপস্ক্রিপ্ট ১.৮.১০ ব্যবহার করে আরও সাম্প্রতিক উত্তর:

আমার প্রকল্পের কাঠামোটি হ'ল:

|
|--- src
|--- test
|--- dist     <= My gulp file compiles and places the js, sourcemaps and .d.ts files here
|      |--- src
|      |--- test
|--- typings
.gitignore
.npmignore
gulpfile.js
package.json
README.md
tsconfig.json
tslint.json
typings.json

.npmignoreএক্সট্রােনস ফাইলগুলি এড়াতে এবং প্যাকেজটি আমদানি করা এবং কাজ করার জন্য সর্বনিম্ন রাখার জন্য আমি নিম্নলিখিতটি যুক্ত করেছি:

node_modules/
*.log
*.tgz

src/
test/
gulpfile.js
tsconfig.json
tslint.json
typings.json
typings
dist/test

আমার .gitignoreআছে:

typings

# ignore .js.map files
*.js.map
*.js
dist

আমার package.jsonআছে:

"main": "dist/src/index.js",
"typings":  "dist/src/index.d.ts",

এখন আমি চালাচ্ছি: npm pack

ফলস্বরূপ ফাইলে (আনজিপ করা অবস্থায়) নিম্নলিখিত কাঠামো থাকে:

|
|--- dist
|       |--- src
|              |
|              index.js
|              index.js.map
|              index.d.ts
|
package.json
README.md

এখন আমি সেই প্রকল্পে যাচ্ছি যেখানে আমি এটি একটি লাইব্রেরি হিসাবে ব্যবহার করতে চাই এবং টাইপ করুন: npm install ./project-1.0.0.tgz

এটি সফলভাবে ইনস্টল করে।

এখন আমি index.tsআমার প্রকল্পে একটি ফাইল তৈরি করি যেখানে আমি সবেমাত্র এনপিএম ইনস্টল করেছি import Project = require("project");

টাইপিং Project.আমাকে ইন্টেলিসেন্স বিকল্প দেয় যা এই পুরো অনুশীলনের মূল বিষয় ছিল।

আশা করি এটি অন্য কাউকে তাদের বড় প্রকল্পে টাইপস্ক্রিপ্ট এনপিএম প্রকল্পগুলি অভ্যন্তরীণ লাইব্রেরি হিসাবে ব্যবহার করতে সহায়তা করবে।

দ্রষ্টব্য: আমি বিশ্বাস করি যে npm মডিউল যা অন্যান্য প্রকল্পে ব্যবহার করা যেতে পারে প্রকল্প কম্পাইল এই পদ্ধতির স্মরণ করিয়ে দেয় .dllযে .NETদুনিয়া। আমি ভালভাবে ভিএস কোডের একটি সলিউশনে প্রকল্পগুলি সংগঠিত হওয়ার কল্পনা করতে পারি যেখানে প্রতিটি প্রকল্প একটি এনপিএম প্যাকেজ তৈরি করে যা এরপরে নির্ভরতা হিসাবে সমাধানে অন্য প্রকল্পে ব্যবহার করা যেতে পারে।

যেহেতু এটি বের করার জন্য আমার যথেষ্ট পরিমাণ সময় লেগেছে, তাই কেউ এখানে আটকে থাকলে আমি এটি পোস্ট করেছি।

আমি এটি একটি বন্ধ বাগের জন্য এখানে পোস্ট করেছি: https://github.com/npm/npm/issues/11546


এই উদাহরণটি গিথুবকে আপলোড করা হয়েছে: ভ্যাচটারজি / টিএসসি-বীজ


আপনি কি গিথুবে একটি উদাহরণ আপলোড করতে পারেন? এটা অনেক সাহায্য করবে! :)
হান চে


এটি কীভাবে টাইপ স্ক্রিপ্ট প্রকল্পগুলিতে ব্যবহার করা যেতে পারে?
সুপারউবারডুপার

5

টাইপ সংজ্ঞা পরিবর্তে আপনার মূল টাইপ স্ক্রিপ্ট উত্স প্রকাশ করা উচিত। ইন package.json* .ts ফাইলে 'ধরনের' সম্পত্তি বিন্দু যাক।

*.d.ts বিদ্যমান জেএস লিবগুলি বর্ননা করা ভাল, তবে একজন গ্রাহক হিসাবে আমি টাইপ স্ক্রিপ্ট কোডটি টাইপ সংজ্ঞা এবং ডাউন লেভেলযুক্ত, জেনারেটেড জেএস কোডের মধ্যে স্যুইচ করার চেয়ে পড়তাম।


1
টাইপস্ক্রিপ্ট সংকলক এখনও পর্যন্ত এটি উপযুক্ত নয় বলে মনে হচ্ছে। এই সমস্যাটি দেখুন github.com/Mic Microsoft
সোভেন এফটিঞ্জ

2
বর্তমানে *.d.tsএটি করার প্রস্তাবিত উপায়টি অন্তর্ভুক্ত রয়েছে, যদিও আমি *.tsফাইলগুলি সহ টাইপস্ক্রিপ্ট.আর.ডক্স
টিম

5

আমি মূলত বরুণ চ্যাটার্জির পরামর্শ অনুসরণ করি

কিন্তু, আমি ইউনিট টেস্টিং এবং কোড কভারেজ এবং সেটিকে প্রকাশ সঙ্গে একটি সম্পূর্ণ উদাহরণ দেখাতে চাই npmএবং ব্যবহার করে সেগুলি আমদানি javascriptবাtypescript

এই মডিউলটি ব্যবহার করে লেখা typescript 2.2এবং এটি এনএমপিতে প্রকাশের আগে prepublishকোডটি tscसंकलित করতে হুকটি কনফিগার করা গুরুত্বপূর্ণ

https://github.com/sweetim/haversine-position

https://www.npmjs.com/package/haversine-position


1
এটি একটি খুব দরকারী উদাহরণ, ভাগ করে নেওয়ার জন্য ধন্যবাদ! আমি বর্তমানে এই ফ্যাশনে প্যাকেজ তৈরির স্তব্ধ পেতে চেষ্টা করছি।
জেফ্রি ওয়েস্টারক্যাম্প

1
জুলাই 2017 পর্যন্ত, এটি আমি জুড়ে এসেছি সেরা প্রকল্প কাঠামো। টিম এবং বরুণ চ্যাটার্জিকে ধন্যবাদ
অ্যাডাঙ্গাং

3

আপনি ব্যবহার করতে পারেন autodts বিতরণ এবং ব্যবহার হ্যান্ডেল করতে .d.tsঅ্যাটম আইডিই থেকে সমর্থন ছাড়া npm থেকেও ফাইল।

autodts generate.d.tsএনপিএম-এ প্রকাশের জন্য আপনার নিজের ফাইলগুলিকে একসাথে বান্ডেল করবে এবং autodts linkঅন্যান্য ইনস্টল করা প্যাকেজগুলির রেফারেন্সগুলি পরিচালনা করবে, যা সর্বদা node_modulesবেশ কয়েকটি সাবপ্যাকেজগুলিতে বিভক্ত কোনও বৃহত প্রকল্পের অধীনে নাও থাকতে পারে ।

উভয় কমান্ডই তাদের কনফিগারেশন "কনফিগারেশন ওভার কনফিগারেশন" স্টাইল থেকে package.jsonএবং সেটিংগুলিতে পড়ে tsconfig.json

আছে অন্য উত্তর Stackoverflow এবং একটি ব্লগ পোস্টে আরো বিস্তারিত দিয়ে।


0

লসলেস এ আমরা এনপিএম প্যাকেজগুলির জন্য একটি স্টপ টাইপসক্রিপ্ট দেব সরঞ্জাম তৈরি করেছি: https://gitzone.gitlab.io/npmts/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.