टाइपस्क्रिप्ट के साथ वीएस कोड में मॉड्यूल "एफएस" कैसे खोजें?


83

मैं मैकबुक एयर पर चल रहा हूं। मैंने एक आईडीई के रूप में वीएस कोड स्थापित किया और टाइपस्क्रिप्ट भी स्थापित किया है।

मेरे पास इस लाइन के साथ एक साधारण फाइल है:

import fs = require('fs');

मुझे कोष्ठक के अंदर 'fs' के नीचे एक लाल स्क्विगली मिल रही है और त्रुटि संदेश है [ts] Cannot find module 'fs'.। फ़ाइल में ए टी एस एक्सटेंशन है। मैं जावास्क्रिप्ट और टाइपस्क्रिप्ट के लिए नया हूं, लेकिन मैं इस धारणा के तहत fsथा कि एक कोर मॉड्यूल था, इसलिए यह कैसे नहीं मिल सकता है? मैं समस्या को कैसे ठीक करूं?

अन्य चीजें जो मैंने पहले से ही आजमाई हैं:

  • फ़ाइल में एक साधारण फ़ंक्शन बॉडी रखना और फिर कमांड लाइन के साथ संकलन करना tsc। मुझे वहां अनिवार्य रूप से बराबर त्रुटि मिलती है:error TS2307: Cannot find module 'fs'.
  • कमांड लाइन पर sudo npm install fs -g। यह स्पष्ट सफलता की रिपोर्ट करता है, लेकिन समस्या को ठीक नहीं करता है।

मैंने एसई और वेब के चारों ओर पोक किया, लेकिन जो उत्तर करीब से प्रतीत होते थे, वे मानते हैं कि 'एफएस' उपलब्ध है।


आप निश्चित रूप से इस कोड को निष्पादित कर रहे हैं node?
पेटिब

योजना को नोड के साथ निष्पादित करना है, हाँ। वर्तमान एप्लिकेशन के लिए स्थानीय फ़ाइल का उपयोग ठीक है। @पेटेब
ब्रिक

जवाबों:


96

आपको नोड के लिए परिभाषा फ़ाइल शामिल करने की आवश्यकता है।

टाइपस्क्रिप्ट 2.0+

Npm का उपयोग कर स्थापित करें:

npm install --save-dev @types/node

टाइपस्क्रिप्ट <2.0

यदि आप टाइपिंग का उपयोग करते हैं तो आप इस कमांड को चला सकते हैं:

typings install dt~node --global --save

या यदि आप टाइपिंग का उपयोग कर रहे हैं <1.0 रन:

typings install node --ambient --save

या यदि अन्य सभी विफल होते हैं, तो मैन्युअल रूप से फ़ाइल को यहां डाउनलोड करें और इसे अपनी परियोजना में शामिल करें।


1
मैंने उस आदेश का उपयोग किया था जो आपके संपादन से पहले था, और जिसने यह चाल चली। ( typings install node --ambient --save) धन्यवाद!
ब्रिक

@ ब्रिक हां जो काम करेगा। उत्तर में आदेश टाइपिंग 1.0 के लिए है जो अभी जारी किया गया था
डेविड शेरेट

यह पुराना है, इन दिनों प्रकारों को आमतौर पर npm के साथ स्थापित किया जाना चाहिए, जैसा कि अबे के उत्तर में है
dshepherd

यार्न के साथ:yarn add @types/node --dev
जोनाथन एच

स्थापित करने के बाद @types/node, आपको मॉड्यूल को ठीक से पहचानने के लिए कोड प्राप्त करने की आवश्यकता हो सकती है। यह केवल देशी नोड मॉड्यूल के मामले में होना चाहिए, और आपके कोड के निर्माण के आधार पर आपके लिए एक मुद्दा भी नहीं हो सकता है।
डॉन

50

पिछले tsd या टाइपिंग टूल पर जाए बिना अब एक बेहतर तरीका है। एनपीएम में अब टाइपस्क्रिप्ट के लिए @types पैकेज है। इस उदाहरण में आपको पैकेज की आवश्यकता है @types/node:

npm install "@types/node" --save-dev

सुनिश्चित करें कि आप सेव-डे विकल्प का उपयोग केवल विकास मोड में स्थापित करने के लिए कर रहे हैं, उत्पादन में नहीं। आपको npm इंस्टॉल "@ प्रकार /" सिंटैक्स का उपयोग करते समय नवीनतम नोड लाइब्रेरी होनी चाहिए ...

यह fs पैकेज नहीं ढूँढ रहा है क्योंकि पिछले टूल टाइपिंग में नवीनतम नोड.d.ts परिभाषा फ़ाइल का उपयोग नहीं करने की संभावना है।

इन प्रकार के पैकेजों को खोजने के लिए आपकी tsconfig.json फ़ाइल को अद्यतन करने की आवश्यकता है। मेरा उदाहरण अगर jquery, jqueryui और नोड प्रकारों का उपयोग कर रहा है। यह मानते हुए कि आपको अपने कोड संपादक के लिए भी काम करने के लिए वाक्यविन्यास की आवश्यकता है, इस मामले में 'परमाणु' कोड संपादक

{
"compileOnSave": false,
"compilerOptions": {
    "rootDir": "src",
    "sourceMap": true,
    "target": "es5",
    "module": "amd",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "lib": ["es2015", "dom"],
    "baseUrl": "./",
    "typeRoots": [
        "node_modules/@types"
    ],
    "types": [
        "jquery",
        "jqueryui",
        "node"
    ],
    "paths": {
        "src/*": ["src/*"]
    }
},
"exclude": [
    "node_modules",
    "dist",
    "build"
],
"filesGlob": [
    "./src/**/*.ts",
    "./test/**/*.ts",
    "./typings/index.d.ts",
    "./custom_typings/**/*.d.ts",
    "./node_modules/@types/**/*.d.ts"
],
"atom": {
    "rewriteTsconfig": false
}
}

32

"fs" एक कोर नोड मॉड्यूल है और मुझे लगता है कि आपका इम्पोर्ट स्टेटमेंट सिंटैक्स थोड़ा हटकर है। प्रयत्न:

import * as fs from "fs";

आह नोड के लिए टाइपिंग शामिल नहीं है। इस फ़ाइल और इसमें एक संदर्भ पथ को जोड़ने का प्रयास करें: github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/…
एरिक एन

1
@ EricN पृष्ठ 404 की ओर जाता है। यदि मॉड्यूल पूरे NodeJs कोर का हिस्सा है तो भी टाइपिंग की आवश्यकता है?
जैक

हाँ टाइपिंग आवश्यक है। नोड टाइपस्क्रिप्ट में नहीं लिखा है, इसलिए इसमें कोई भी प्रकार का डेटा नहीं है, जो टाइपस्क्रिप्ट के लिए दिखता है। परिभाषा फ़ाइल आपके लिए वह सभी प्रकार का डेटा प्रदान करती है।
एरिक एन

21

आपको अपनी tsconfig.json में "नोड" के लिए "मॉड्यूलऑनलाइन" सेट करना होगा:

{
  "compilerOptions": {
      ...
      "moduleResolution": "node"
      ...
  }
}

निष्पादित

npm install @types/node --save-dev

और अब आप मानक टाइपस्क्रिप्ट आयात का उपयोग कर सकते हैं:

import * as fs from "fs";

कोशिश की लेकिन अभी भी वही समस्या हो रही है
परदीप जैन

1
@pardeepjain, कोई भी मौका आपके पास पुरानी टाइपस्क्रिप्ट है? Vscode का उपयोग? स्थिति पट्टी पर टाइपस्क्रिप्ट संस्करण की जाँच करें।
yirtimiD

4

आपके पास तीन विकल्प हैं tsconfig.json(यहां: नोड 11+), डॉक्स देखें :

या तो दोनों निर्दिष्ट करेंtypeRoots और types, केवल typeRootsया दोनों पंक्तियों को पूरी तरह से हटा दें (अनुशंसित):

{"compilerOptions": {
  ...
  "typeRoots": ["node_modules/@types"],  // "typeRoots": [] -> won't work
  "types": ["node"]                      // "types": [] -> won't work
}}

स्थापित प्रकार:

npm install --save-dev @types/node

वादे आधारित फ़ाइल प्रणाली का उपयोग करें (जैसे async / प्रतीक्षा का उपयोग करने के लिए):

import {promises as fs} from 'fs';

async function foo() {
    ...
    await fs.writeFile('./yourPath', 'YourContent');
}

जब मैंने अपनी .d.tsफ़ाइलों को डालने के लिए एक घोषणा फ़ोल्डर बनाया और एक typeRootsसरणी बनाई, जिसमें compilerOptionsमैंने निर्दिष्ट नहीं किया था node_modules/@typesऔर यही मेरे लिए त्रुटि का कारण बना। एक बार जब मैंने typeRootsइसे सरणी में जोड़ा , तो इसने फिर से काम किया।
str8up7od

2

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

fsमॉड्यूल के बारे में जानने के लिए आईडीई के लिए , आपको नोड के लिए टाइपिंग प्रदान करना होगा।

इस गीथब मुद्दे को भी देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.