मुझे मूल पोस्टर (@robsonrosa) के समान समस्या है। मेरे मामले में मैं टाइपक्रिप्ट का उपयोग करता हूं जो एक dist
निर्देशिका के लिए संकलित करता है । जब मैं टाइपस्क्रिप्ट को रूट डायरेक्टरी में संकलित कर सकता था, तो मुझे लगता है कि सबसे अच्छा समाधान package.json
डिस्टर्ब डायरेक्टरी में एक अलग फाइल जेनरेट करना है ।
यह एक प्रतिलिपि के package.json
साथ @scvnc सुझाव के समान है लेकिन एक मोड़ के साथ:
पैकेजिंग प्रक्रिया के हिस्से के रूप में आपको package.json
पैकेज के लिए उत्पन्न करना चाहिए जो package.json
कि रूट डायरेक्टरी में मुख्य फाइल से अलग है
तर्कसंगत:
- रूट
package.json
फ़ाइल विकास फ़ाइल है। इसमें स्क्रिप्ट या विकास निर्भरताएँ हो सकती हैं जो पैकेज उपयोगकर्ता के लिए किसी काम की नहीं हैं, लेकिन आपके लिए सुरक्षा चिंताओं का कारण बन सकती हैं। आपकी पैकेजिंग प्रक्रिया में कोड शामिल हो सकता है जो उत्पादन से जानकारी प्राप्त करता है package.json
।
- आप अपने पैकेज को अलग-अलग वातावरणों में तैनात करना चाहते हैं, जिसके लिए अलग-अलग पैकेज फ़ाइलों की आवश्यकता हो सकती है (जैसे आप अलग-अलग संस्करण या निर्भरताएं चाहते हो सकते हैं)।
--- संपादित करें ---
मुझे टिप्पणियों में समाधान के लिए कहा गया था। तो यहाँ कुछ कोड का उपयोग कर रहा हूँ। इसे एक उदाहरण के रूप में माना जाना चाहिए क्योंकि यह सामान्य नहीं है और मेरी परियोजनाओं के लिए विशिष्ट है।
मेरा सेटअप:
package.json - main package.json with dev dependencies and useful scripts.
.npmignore - files to ignore; copied to 'dist' directory as part of the setup.
/src - directory where my typescript code resides.
/src/SetupPackage.ts - bit of code used to setup the package.
/dist - destination directory for the compiled javascript files.
मैं केवल dist
निर्देशिका पैकेज करना चाहता हूं और निर्देशिका पैकेज में रूट निर्देशिका होनी चाहिए।
SetupPackage.ts
मेरी src
निर्देशिका में फ़ाइल टाइपस्क्रिप्ट द्वारा निर्देशिका SetupPackage.js
में संकलित की जाएगी dist
:
import fs from "fs";
// DO NOT DELETE THIS FILE
// This file is used by build system to build a clean npm package with the compiled js files in the root of the package.
// It will not be included in the npm package.
function main() {
const source = fs.readFileSync(__dirname + "/../package.json").toString('utf-8');
const sourceObj = JSON.parse(source);
sourceObj.scripts = {};
sourceObj.devDependencies = {};
if (sourceObj.main.startsWith("dist/")) {
sourceObj.main = sourceObj.main.slice(5);
}
fs.writeFileSync(__dirname + "/package.json", Buffer.from(JSON.stringify(sourceObj, null, 2), "utf-8") );
fs.writeFileSync(__dirname + "/version.txt", Buffer.from(sourceObj.version, "utf-8") );
fs.copyFileSync(__dirname + "/../.npmignore", __dirname + "/.npmignore");
}
main();
यह फ़ाइल:
- रूट की प्रतिलिपि बनाता है,
package.json
लेकिन स्क्रिप्ट और देव निर्भरता को हटा देता है जिनकी पैकेज में आवश्यकता नहीं है। यह पैकेज के मुख्य प्रवेश बिंदु को भी ठीक करता है।
- पैकेज के संस्करण
package.json
को एक फ़ाइल से लिखता है जिसे कहा जाता है version.txt
।
.npmignore
पैकेज को रूट से कॉपी करता है ।
.Npmignore सामग्री है:
*.map
*.spec.*
SetupPackage.*
version.txt
Ie इकाई परीक्षण (स्पेस फाइलें) और टाइपस्क्रिप्ट मैप फाइल को नजरअंदाज करने के साथ-साथ SetupPackage.js
फाइल और version.txt
इसे बनाने वाली फाइल को भी नजरअंदाज किया जाता है। इससे साफ पैकेज मिलता है।
अंत में मुख्य package.json
फ़ाइल में बिल्ड सिस्टम द्वारा उपयोग के लिए निम्न स्क्रिप्ट हैं (मान लिया sh
जाता है कि शेल के रूप में उपयोग किया जाता है)।
"scripts": {
"compile": "tsc",
"clean": "rm -rf dist",
"prebuildpackage": "npm run clean && npm run compile && node dist/SetupPackage.js",
"buildpackage": "cd dist && npm pack"
},
पैकेज बनाने के लिए बिल्ड सिस्टम रेपो क्लोन करता है, जो करता है npm install
और फिर चलता है npm run buildpackage
जो बदले में:
dist
एक साफ संकलन सुनिश्चित करने वाली निर्देशिका को हटाता है ।
- जावास्क्रिप्ट को टाइपस्क्रिप्ट कोड संकलित करता है।
- उस
SetupPackage.js
फ़ाइल को निष्पादित करता है जो dist
पैकेजिंग के लिए तैयार करती है।
dist
निर्देशिका के लिए सीडी और वहाँ पैकेज बनाता है।
मैं version.txt
पैकेज में संस्करण को प्राप्त करने के लिए एक आसान तरीका के रूप में फाइल का उपयोग करता हूं । संदेश और मेरे रेपो को टैग करने के लिए। ऐसा करने के लिए अनगिनत अन्य तरीके हैं या आप संस्करण को ऑटो-इंक्रीज करना चाहते हैं। इसे हटा दें SetupPackage.ts
और .npmignore
यदि यह आपके लिए उपयोगी नहीं है।