[node.js] typescript에서 npm 모듈을 사용하는 방법은 무엇입니까?

나는 타이프 스크립트를 시도하고있다. hello world 무대에서 잘 작동합니다. 이제 npm 모듈을 사용하려고합니다.

index.ts =

import _ = require('lodash')

console.log(_.toUpper('Hello, world !'))

작동하지 않습니다.

  • tsc index.ts -> Cannot find module 'lodash'. (2307)
  • node-ts index.js -> Cannot find module 'lodash'. (2307)

typescript 문서와 Google을 보면 도움이되지 않았습니다. 다른 S / O 질문은 답변되지 않았거나 ( 여기여기 ) 관련이 없습니다.

요소 :

  • typescript 1.8 최신
  • 예, lodash가 설치되어 npm i --save lodash있고 내 파일 시스템에 있습니다 (선택됨).
  • 나도했다 typings i --save lodash
  • 변형 import * as _ from 'lodash'또는 const _ = require('lodash')작동하지 않음
  • 나는 다른 답변에 제안 tsconfig.json 옵션을 조정 시도 "moduleResolution": "node"하고 "module": "commonjs"여전히 작동하지 않는, 어떤 답변에 제안

typescript에서 npm 패키지를 어떻게 사용합니까?



답변

[편집]이 답변에 감사드립니다! 그러나 2018 년 현재 구식입니다. 독자 여러분, 다른 답변을 살펴보십시오.

npm에서 모듈을 가져 오는 방법에는 여러 가지가 있습니다. 그러나 타이핑을 얻지 못하면 tsc항상 필요한 모듈을 찾을 수 없다고 불평합니다 (트랜스 파일 된 js 가 실제로 작동 하더라도 ).

  • 입력이 있고를 사용하지 않는 경우 tsconfig.json를 사용 reference하여 입력을 가져옵니다.

    /// <reference path="path/to/typings/typings.d.ts" />
    
    import * as _ from 'lodash`;
    
    console.log(_.toUpper('Hello, world !'))
    
  • tsconfig.json파일을 사용하는 경우 타이핑 파일이 포함되어 있는지 (또는 선택 사항이 제외되지 않았는지) 확인 import하고 이전 예제 에서 와 같이 만드십시오 .

사용 가능한 타이핑이없는 경우. 두 가지 선택이 있습니다. .d.ts파일에 직접 작성 하거나 라이브러리에 대한 유형 검사를 무시하는 것입니다.

유형 검사를 완전히 무시하려면 (권장되지 않는 방법) 유형의 변수에서 라이브러리를 가져옵니다 any.

 const _: any = require('lodash');

 console.log(_.toUpper('Hello, world !'))

tscrequire존재하지 않는다고 불평 할 것입니다 . node타이핑을 제공 하거나 declare오류를 삭제합니다.


답변

[2018/12] 2016 년에 제가 물었던이 질문에 대한 새로운 최신 답변입니다. 답변은 구식 임에도 불구하고 여전히 많은 활동을 보여줍니다.

간단히 말해서 TypeScript는 패키지의 코드에 대한 유형 정보 (일명 ” 유형 선언 파일 “일명 “유형”)를 필요로하며 그렇지 않으면 TypeScript의 전체 요점을 잃게 될 것이라고 정당하게 알려줍니다. 이러한 솔루션을 제공하거나 옵트 아웃 할 수있는 몇 가지 솔루션이 여기에 모범 사례 순서대로 나열되어 있습니다.


솔루션 0 : 모듈이 이미 타이핑을 제공합니다. package.json에 다음과 같은 줄이 포함되어있는 경우 :

"typings": "dist/index.d.ts",

이미 TypeScript를 사용할 수 있습니다. 이 페이지를 읽고있는 경우에는 해당되지 않을 가능성이 높으므로 계속하겠습니다.


해결 방법 1 : DefinitelyTyped 에서 커뮤니티 제공 입력을 사용 합니다. 모듈 “foo”의 경우 다음을 시도하십시오.

npm add -D @types/foo

작동하면 대박! 이제 타이핑을했고 모듈을 사용할 수 있습니다. npm이 @ types / foo 모듈을 찾을 수 없다고 불평하면 계속합시다 …


해결 방법 2 :이 모듈에 대한 사용자 지정 입력을 제공합니다. (제로 노력을 할 수있는 옵션 포함)

  1. 프로젝트의 루트에 “typings-custom”이라는 폴더를 만듭니다.
  2. tsconfig.json에서이 폴더의 내용을 참조하십시오.
"include": [
    "./typings-custom/**/*.ts"
]
  1. 다음과 같은 정확한 이름으로 파일을 생성합니다. foo.d.ts [foo = 모듈 이름] 콘텐츠와 함께 :
declare module 'foo'

TypeScript 코드는 이제 유형 정보가 없지만 컴파일되어야합니다 (TypeScript는 “any”유형의 foo 모듈을 고려함).

공식 문서 및 / 또는 DefinitelyTyped의 예제를 보고 유형 정보를 직접 작성해 볼 수도 있습니다 . 그렇다면 모듈 (모듈 작성자가 수락하는 경우 솔루션 0)에 직접 입력하거나 DefinitelyTyped (솔루션 1)에 입력하는 것을 고려하십시오.


답변

선언 파일이 누락되었을 수 있습니다.

자세한 내용은 DefinitelyTyped 를 참조하세요.


이 시도:

npm install --save lodash
npm install --save @types/lodash

이제 가져올 수 있습니다.

import _ from 'lodash';

가져 오는 모듈에 여러 내보내기가있는 경우 다음을 수행 할 수 있습니다.

import { Express, Router } from 'express';

가져 오는 모듈에 “기본 내보내기가 없음”인 경우 다음을 수행해야합니다.

import * as http from 'http';


답변

그것은 나를 위해 일했습니다.

  1. “typings”라는 폴더를 만듭니다.
  2. typings 폴더에서 파일 이름 module-name.d.ts를 작성하십시오 . 다음을 포함합니다.

    declare module "module-name";

  3. tsconfig.json에서 폴더를 참조하십시오.

    "typeRoots": [
    "./typings",
    "../node_modules/@types"
    ]


답변

나는이 오류가 발생했으며 대답 중 어느 것도 나를 위해 일하지 않았지만 typescript에서 노드 모듈로 작업하고 싶을 때 무언가를 알아냅니다.

$npm install @types/<module_name>

예를 들면

npm install @types/cheerio

말하는 대신

npm install cheerio


답변