আমি একটি অপেক্ষাকৃত একটি ছোট এনপিএম প্যাকেজ তৈরি করেছি যার মধ্যে প্রতিটি ফাইলে মোটামুটি 5 টি পৃথক ES6 ক্লাস রয়েছে, তারা সবাই দেখতে বেশ সুন্দর দেখাচ্ছে:
export default class MyClass {
// ...
}
তারপরে আমি আমার প্যাকেজটির জন্য এমন একটি এন্ট্রি পয়েন্ট সেটআপ করেছি যা দেখতে দেখতে:
export { default as MyClass } from './my-class.js';
export { default as MyOtherClass } from './my-other-class.js';
এরপরে আমি ওয়েবপ্যাক এবং ব্যাবেলের মাধ্যমে এন্ট্রি পয়েন্টটি চালিত করেছি এবং ট্রান্সপ্লার্ড এবং মিনিফাইড ইন্ডেক্স.জেএস দিয়ে শেষ করব
প্যাকেজ ইনস্টল করা এবং আমদানি করা ভাল কাজ করে তবে আমি যখন আমার ক্লায়েন্ট কোড থেকে নিম্নলিখিতটি করি:
import { MyClass } from 'my-package';
এটি কেবল "মাইক্লাস" আমদানি করে না এটি প্রতিটি শ্রেণীর সমস্ত নির্ভরতা (আমার কিছু শ্রেণীর বিশাল নির্ভরশীলতা সহ) পুরো ফাইলটি আমদানি করে।
আমি অনুভব করেছি যে আপনি যখন ইতিমধ্যে বান্ডেলযুক্ত প্যাকেজের অংশগুলি আমদানির চেষ্টা করছেন তখন ওয়েবপ্যাকটি কীভাবে কাজ করে? সুতরাং আমি node_modules/my-package
খুব সহজেই বাবেল চালানোর জন্য আমার স্থানীয় ওয়েবপ্যাক কনফিগারেশন সেট আপ করেছি এবং তারপরে চেষ্টা করেছি:
import { MyClass } from 'my-package/src/index.js';
এমনকি এটি সূচি.জেএস দ্বারা রফত প্রতিটি একক শ্রেণীর আমদানি করে। আমি চাইলে যেভাবে কাজ করতে পারে বলে মনে হয় কেবল তা হল:
import MyClass from 'my-package/src/my-class.js';
তবে আমি এর চেয়ে অনেক বেশি চাই:
- স্থানান্তরিত এবং সংশোধিত ফাইলটি আমদানি করতে সক্ষম হবেন যাতে নোড_মডিউলগুলির মধ্যে বাবেল চালানোর জন্য আমাকে ওয়েবপ্যাকটি বলতে হবে না এবং
- প্রতিটি ফাইলের পাথ প্রবেশের পরিবর্তে আমার এন্ট্রি পয়েন্ট থেকে প্রতিটি পৃথক শ্রেণিকে সরাসরি আমদানি করতে সক্ষম করুন
এখানে সেরা অনুশীলন কি? অন্যরা কীভাবে অনুরূপ সেটআপগুলি অর্জন করতে পারে? আমি লক্ষ্য করেছি যে গ্লাইডজেএস এর প্যাকেজের একটি ESM সংস্করণ রয়েছে যা আপনাকে উদাহরণস্বরূপ ব্যাবেল চালানো ছাড়া কেবল আপনার প্রয়োজনীয় জিনিসগুলি আমদানি করতে দেয়।
প্যাকেজটিতে প্রশ্ন: https://github.com/powerbuoy/sleek-ui
webpack.config.js
const path = require('path');
module.exports = {
entry: {
'sleek-ui': './src/js/sleek-ui.js'
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist'),
library: 'sleek-ui', // NOTE: Before adding this and libraryTarget I got errors saying "MyClass() is not a constructor" for some reason...
libraryTarget: 'umd'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
]
}
]
}
};
package.json
"name": "sleek-ui",
"version": "1.0.0",
"description": "Lightweight SASS and JS library for common UI elements",
"main": "dist/sleek-ui.js",
"sideEffects": false, // NOTE: Added this from Abhishek's article but it changed nothing for me :/
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode production"
},
"repository": {
"type": "git",
"url": "git+https://github.com/powerbuoy/sleek-ui.git"
},
"author": "Andreas Lagerkvist",
"license": "GPL-2.0-or-later",
"bugs": {
"url": "https://github.com/powerbuoy/sleek-ui/issues"
},
"homepage": "https://github.com/powerbuoy/sleek-ui#readme",
"devDependencies": {
"@babel/core": "^7.8.6",
"@babel/preset-env": "^7.8.6",
"babel-loader": "^8.0.6",
"webpack": "^4.42.0",
"webpack-cli": "^3.3.11"
},
"dependencies": {
"@glidejs/glide": "^3.4.1",
"normalize.css": "^8.0.1"
}
}
import { MyClass } from 'my-package/src/MyClass';
। আপনি ফাইলের পথটি সংক্ষিপ্ত করতে src বিল্ড প্যাকেজিংটিও সরাতে পারেন।
main
লাইবের প্যাকেজ.জসনে (এন্ট্রি পয়েন্ট) বৈশিষ্ট্য যুক্ত করেছেন? আপনার বিল্ড চেক করুন। এবং আপনি কীভাবে আপনার lib প্যাকেজটি বান্ডিল করছেন?