Definitelytyped: λͺ¨λ“ˆ 'csstype'을(λ₯Ό) 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 04μ›” 07일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: DefinitelyTyped/DefinitelyTyped

μ•ˆλ…•ν•˜μ„Έμš”, μ €λŠ” typescript둜 λ°˜μ‘μ„ μ‚¬μš©ν•˜λ €κ³ ν•˜λŠ”λ° ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜κΈ° μœ„ν•΄ ( react , react-dom ), ( @types/react , @types/react-dom )λ₯Ό μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. ERROR in [at-loader] ./node_modules/@types/react/index.d.ts:55:22 Cannot find module 'csstype' 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. @types/react 및 ν”„λ‘œμ νŠΈ λ£¨νŠΈμ—μ„œ npm i csstype λ₯Ό μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 였λ₯˜μ—λ„ λΆˆκ΅¬ν•˜κ³  @types/react λͺ¨λ“ˆμ—λŠ” node_modules/csstype 폴더가 μžˆμœΌλ―€λ‘œ 이 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 이유쑰차 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

tsconfig.json

{
    "compilerOptions": {
        "outDir": "./build/", // path to output directory
        "strictNullChecks": true, // enable strict null checks as a best practice
        "module": "es6", // specify module code generation
        "jsx": "react", // use typescript to transpile jsx to js
        "target": "es5", // specify ECMAScript target version
        "allowJs": true, // allow a partial TypeScript and JavaScript codebase

        "noImplicitAny": true,
        "noImplicitReturns": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
    },
    "exclude": [
        "node_modules"
    ],
    "include": [
        "./source/**/*.tsx",
        "./source/**/*.ts"
    ]
}

νŒ¨ν‚€μ§€.json

{
  "name": "suggestion-app",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "webpack:server": "babel-node node_modules/.bin/webpack-dev-server --mode=development"
  },
  "dependencies": {
    "react": "^16.3.1",
    "react-dom": "^16.3.1"
  },
  "devDependencies": {
    "@types/react": "^16.3.5",
    "@types/react-dom": "^16.0.4",
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-stage-3": "^6.24.1",
    "caniuse-lite": "^1.0.30000697",
    "clean-webpack-plugin": "^0.1.19",
    "css-loader": "^0.28.11",
    "eslint": "^4.19.1",
    "eslint-config-airbnb": "^16.1.0",
    "eslint-plugin-import": "^2.10.0",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-react": "^7.7.0",
    "file-loader": "^1.1.11",
    "glob": "^7.1.2",
    "html-webpack-plugin": "^3.2.0",
    "mini-css-extract-plugin": "^0.4.0",
    "postcss-cssnext": "^3.1.0",
    "postcss-loader": "^2.1.3",
    "purify-css": "^1.2.5",
    "purifycss-webpack": "^0.7.0",
    "script-ext-html-webpack-plugin": "^2.0.1",
    "webpack": "^4.5.0",
    "webpack-cli": "^2.0.14",
    "webpack-dev-server": "^3.1.1"
  }
}

μ†ŒμŠ€/인덱슀.ts

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import './styles/main.css';

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

운영 체제: μš°λΆ„νˆ¬ 17.10

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

compilerOptions.moduleResolution: "node" μ‹œλ„


(Orta에 μ˜ν•΄ νŽΈμ§‘: 만일 당신이 이것을 ν™•μ‹€νžˆ Typed λ‚΄λΆ€μ—μ„œ 보고 μžˆλ‹€λ©΄, 당신은 당신이 κ·Έ 였λ₯˜λ₯Ό 보고 μžˆλŠ” μ’…μ†μ„±μ—μ„œ npm install λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ cd types/react; npm install 그리고 λ‚˜μ„œ λͺ©λ‘μ΄ 더 μ’‹μ•„μ•Ό ν•©λ‹ˆλ‹€ - httpsλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€: //github.com/microsoft/dtslint/issues/226 )

λͺ¨λ“  21 λŒ“κΈ€

compilerOptions.moduleResolution: "node" μ‹œλ„


(Orta에 μ˜ν•΄ νŽΈμ§‘: 만일 당신이 이것을 ν™•μ‹€νžˆ Typed λ‚΄λΆ€μ—μ„œ 보고 μžˆλ‹€λ©΄, 당신은 당신이 κ·Έ 였λ₯˜λ₯Ό 보고 μžˆλŠ” μ’…μ†μ„±μ—μ„œ npm install λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ cd types/react; npm install 그리고 λ‚˜μ„œ λͺ©λ‘μ΄ 더 μ’‹μ•„μ•Ό ν•©λ‹ˆλ‹€ - httpsλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€: //github.com/microsoft/dtslint/issues/226 )

λ‚˜λ„μ΄ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

moduleResolution: true 였λ₯˜κ°€ λ°œμƒ ν•˜κ³  λ¬Έμ„œ 에 μœ νš¨ν•œ κ°’μœΌλ‘œ λ‚˜μ—΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ moduleResolution: "node" μ„€μ •ν•˜λ©΄ μž‘μ—…μ΄ μ™„λ£Œλœ 것 κ°™μŠ΅λ‹ˆλ‹€ πŸ‘ κ°μ‚¬ν•©λ‹ˆλ‹€!

μ£„μ†‘ν•©λ‹ˆλ‹€ "node" 라고 ν•˜λ €λ˜κ±΄λ° πŸ˜† λŒ“κΈ€μ΄ λ°”λ€Œμ—ˆμŠ΅λ‹ˆλ‹€. 도움이 λ˜μ—ˆλ‹€λ‹ˆ λ‹€ν–‰μž…λ‹ˆλ‹€.

Set "moduleResolution": "node" λ‚˜μ—κ²Œλ„ μœ μš©ν•©λ‹ˆλ‹€.

κ³ λ§ˆμ›Œ ν”„λ ˆλ‹‰. μ €μ—κ²Œλ„ νš¨κ³Όμ μž…λ‹ˆλ‹€.

λˆ„κ΅¬λ“ μ§€ κ·Έ μ΄μœ μ— λŒ€ν•΄ 색상을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 이 섀정을 λΆˆν•„μš”ν•˜κ²Œ λ§Œλ“œλŠ” μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

compilerOptions.module === "AMD" or "System" or "ES6" 의 기본값이 compilerOptions.moduleResolution 이면 "Classic" 이고, 그렇지 μ•ŠμœΌλ©΄ "Node" μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ΄λŸ¬ν•œ λͺ¨λ“ˆ μ „λž΅ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ node_modules μž…λ‹ˆλ‹€. compilerOptions.moduleResolution λŠ” "Node" 둜 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Classic :

κ·ΈλŸ¬λ‚˜ μƒλŒ€μ μ΄μ§€ μ•Šμ€ λͺ¨λ“ˆ κ°€μ Έμ˜€κΈ°μ˜ 경우 μ»΄νŒŒμΌλŸ¬λŠ” μΌμΉ˜ν•˜λŠ” μ •μ˜ νŒŒμΌμ„ 찾으렀고 κ°€μ Έμ˜€κΈ° 파일이 ν¬ν•¨λœ λ””λ ‰ν† λ¦¬μ—μ„œ μ‹œμž‘ν•˜λŠ” 디렉토리 트리λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€.

Node :

NodeλŠ” node_modulesλΌλŠ” 특수 ν΄λ”μ—μ„œ λͺ¨λ“ˆμ„ μ°ΎμŠ΅λ‹ˆλ‹€. node_modules ν΄λ”λŠ” ν˜„μž¬ 파일과 같은 μˆ˜μ€€μ— μžˆκ±°λ‚˜ 디렉터리 μ²΄μΈμ—μ„œ μƒμœ„μ— μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ…Έλ“œλŠ” λ‘œλ“œν•˜λ €κ³  μ‹œλ„ν•œ λͺ¨λ“ˆμ„ 찾을 λ•ŒκΉŒμ§€ 각 node_modulesλ₯Ό μ‚΄νŽ΄λ³΄κ³  디렉터리 체인을 κ±Έμ–΄ μ˜¬λΌκ°‘λ‹ˆλ‹€.

( 좜처 )

"module": "commonjs" 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. μ‹œλ„ν•΄ λ³΄μ„Έμš”.

μ‚¬μš©ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ classic _don't_가에 λ³€ν™”λ₯Ό μ›ν•˜λŠ” μ‚¬λžŒλ“€ λͺ¨λ“ˆ 해상도λ₯Ό node λͺ¨λ“ˆ 해상도, λ‚˜λŠ” μΆ”κ°€ν•˜μ—¬μ΄ 문제λ₯Ό 주변에 얻을 수 μžˆμ—ˆλ‹€ paths λŒ€ν•œ ν•­λͺ©μ„ csstype in my tsconfig.json λ‚΄ ν”„λ‘œμ νŠΈκ°€ baseUrl ꡬ성 μ˜΅μ…˜μ„ μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ baseUrl λ¬Έμ„œ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λΆ„λͺ…νžˆ 이것은 이와 같은 좩돌이 λ§Žμ€ 경우 ν™•μž₯ κ°€λŠ₯ν•œ μ ‘κ·Ό 방식이 μ•„λ‹ˆμ§€λ§Œ 이것이 우리의 첫 λ²ˆμ§Έμ˜€μœΌλ©° node λͺ¨λ“ˆ ν•΄μƒλ„λ‘œ μ „ν™˜ν•˜λŠ” 것을 κ³ λ €ν•˜λ €λŠ” 경우 μ΅œμ†Œν•œ μ‹œκ°„μ„

λ‚˜λ„ 이것에 λ›°μ–΄ λ“€μ—ˆλ‹€.

WebPack + TypeScriptλ₯Ό 톡해

Module not found: Error: Can't resolve 'csstype' 

κ½€ ν•΄ν‚€ 일 κ°€λŠ₯성이 μžˆμ§€λ§Œ TS 2.9λΆ€ν„° import() μœ ν˜•μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (https://blogs.msdn.microsoft.com/typescript/2018/05/31/announcing-typescript -2-9/#import-types), κ·Έλž˜μ„œ λ‚˜λŠ” μ΄κ²ƒμ„ν–ˆκ³  λΆˆν‰μ—†μ΄ μ§€κΈˆ μ»΄νŒŒμΌλ©λ‹ˆλ‹€.

type VisibilityProperty = import('csstype').VisibilityProperty;
type AnimationProperty = import('csstype').AnimationProperty;

μ•ˆλ…•ν•˜μ„Έμš”. compilerOptions.moduleResolution: "node" 섀정을 μ œμ•ˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λΆˆν–‰νžˆλ„ create-react-app-typescriptλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό

계속 ν™•μΈν•˜κ² μ§€λ§Œ λˆ„κ΅°κ°€κ°€ 이미 닡을 μ•Œκ³  있고 ν•΄κ²° 방법을 μ•Œλ €μ€„ 수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€ :-)

μ—…λ°μ΄νŠΈ : λ‚΄ λ‚˜μœ 섀정은 μ£„μ†‘ν•©λ‹ˆλ‹€ -이 인 tsconfig.test.json 둜 λͺ¨λ“ˆ μ„€μ •ν–ˆλŠ”μ§€ commonjs ν•˜κ³  μΆ”κ°€ "moduleResolution": "node" 그것을 ν•΄κ²° ν•œ κ²ƒμœΌλ‘œ 보인닀.

λ‚˜λŠ” 체크 μ•„μ›ƒν•˜κ³  types/react-tag-autocomplete μ‹€ν–‰ npm run lint react-tag-autocomplete . error TS2307: Cannot find module 'csstype' 같은 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

첨가 ν›„ "moduleResolution": "node", 의 compilerOptions 의 react-tag-complete 'SλŠ” tsconfig.json : 그것은 였λ₯˜ 제곡 Error: Unexpected compiler option moduleResolution .

도움이 λ˜μ…¨λ‚˜μš”?

이것은 λ°˜μ‘μ— μ˜μ‘΄ν•˜λŠ” μœ ν˜• μ •μ˜λ₯Ό μž‘μ„±ν•˜λ €κ³  μ• μ“°λŠ” λ‚˜λ₯Ό 미치게 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. csstype λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” 자체 TS μ •μ˜κ°€ μžˆμœΌλ―€λ‘œ 이 μ €μž₯μ†Œμ˜ /types 디렉토리에 μ—†μŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ dtslintμ—μ„œ 문제λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

https://github.com/Microsoft/dtslint/issues/226

μ €μ—κ²ŒλŠ” moduleResolution λ§€κ°œλ³€μˆ˜ 섀정이 μž‘λ™ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— @mike-marcacciκ°€ dtslint repoμ—μ„œ 제기 ν•œ

cd types/react
npm i

@Rahul-Sagore λ‹Ήμ‹ κ³Ό 같은 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 μ•Œμ•„λ‚Έ 적이 μžˆμŠ΅λ‹ˆκΉŒ?

@mcmar μ•„λ‹ˆμš”.

@Rahul-Sagore λ‹Ήμ‹ κ³Ό 같은 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 μ•Œμ•„λ‚Έ 적이 μžˆμŠ΅λ‹ˆκΉŒ?

types/react 쒅속성을 μ„€μΉ˜ν•΄μ•Ό ν•˜λ©° μž‘λ™ν•©λ‹ˆλ‹€. :)

이 λ‹΅μž₯에 ν‘œμ‹œλœ λŒ€λ‘œ https://github.com/DefinitelyTyped/DefinitelyTyped/issues/24788#issuecomment -495861835

λ‚˜λŠ” λ˜ν•œμ΄ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  1. "moduleResolution": "node", μ„€μ • 였λ₯˜ Error: Unexpected compiler option moduleResolution
  2. λ‚˜λŠ” μ‹œλ„ν–ˆλ‹€
    cd types\react
    npm i

그런 λ‹€μŒ npm run lint <my-package> μ‹€ν–‰ν•˜λ©΄ csstype 와 같은 μ—„μ²­λ‚œ μ–‘μ˜ 였λ₯˜κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

../react/node_modules/csstype/index.d.ts(2071,31): error TS1005: '(' expected.
../react/node_modules/csstype/index.d.ts(2083,19): error TS2693: 'LetterSpacingProperty' only refers to a type, but is being used as a value here.
../react/node_modules/csstype/index.d.ts(2083,49): error TS1005: '(' expected.
../react/node_modules/csstype/index.d.ts(2096,15): error TS2693: 'LineBreakProperty' only refers to a type, but is being used as a value here.

그리고 수백 개의 μœ μ‚¬ν•œ 라인

1/2 단계λ₯Ό μˆ˜ν–‰ν•œ ν›„ @fyodore82 와 λ™μΌν•œ 였λ₯˜

λŒ€λ¬Έμž "N"으둜 "λ…Έλ“œ"λ₯Ό μž‘μ„±ν•˜μ—¬ ν•΄κ²°ν•˜μ‹­μ‹œμ˜€.

"moduleResolution": "Node"

우리 μͺ½μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

https://www.typescriptlang.org/docs/handbook/compiler-options.html

"moduleResolution": "Node" μ†”λ£¨μ…˜μœΌλ‘œ ν•΄κ²°λ˜μ§€ μ•Šμ•˜μ§€λ§Œ /types/react λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ npm install μ‹€ν–‰ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰