WebStorm에서 가져 오기를위한 경로 별칭


83

ES6 모듈 로딩을 위해 webpack 경로 별칭을 사용합니다.

예를 들어utils 같은 대신 별칭을 정의하면
import Foo from "../../../utils/foo"할 수 있습니다.
import Foo from "utils/foo"

문제는 일단 별칭을 사용하기 시작하면 WebStorm이 가져 오기 추적을 잃고 경고와 자동 완성이 남지 않는다는 것입니다.

WebStorm에 이러한 별칭을 사용하도록 지시하는 방법이 있습니까?

답변:


125

네, 있습니다.

실제로 Webstorm은 Webpack 구성을 자동으로 구문 분석하고 적용 할 수 없지만 동일한 방식으로 별칭을 설정할 수 있습니다.

"utils" 의 상위 폴더 (예 : 예)를 리소스 루트 로 표시하기 만하면 됩니다 (오른쪽 클릭, 디렉토리를 / 리소스 루트로 표시).

폴더를 마우스 오른쪽 버튼으로 클릭

우리는 다음 구조로 처리했습니다.

/src
    /A
    /B
    /C

Webpack에서 별칭으로 선언 된 AB 및 C 폴더가 있습니다. 그리고 Webstorm에서 "src"를 "Resource Root"로 표시했습니다.

이제 간단히 가져올 수 있습니다.

import A/path/to/any/file.js

대신에

import ../../../../../A/path/to/any/file.js

Webstorm이 모든 코드를 올바르게 구문 분석하고 인덱싱하고 파일에 대한 링크, 자동 완성 등을 유지하면서 ...


2
이것은 Webstorm에서 직접 빌드하지 않을 때 효과적으로 문제를 일으킬 것입니다
maddrag0n

2
WebStorm 2016.2.3에서 시도했지만이 솔루션이 작동하지 않습니다.
Zation

2
angular2의 가져 오기는 어떻습니까? import { Component } from '@angular/core'그것도 해결됩니다. at경로가 별칭임을 더 명확히하기 위해를 어떻게 구현할 수 있습니까?
Hitmands

6
이 블로그 게시물을 참조 @Toosick blog.jetbrains.com/webstorm/2017/06/...
anstarovoyt

3
여러 폴더와 여러 웹팩 구성은 어떻습니까? 다음과 같은 이유로 작동하지 않습니다. "기본적으로 WebStorm은 프로젝트의 루트에있는 webpack 구성 파일을 분석하지만 Preferences | Languages ​​& Frameworks | JavaScript | Webpack에서 다른 파일을 선택할 수 있습니다." blog.jetbrains.com / webstorm / 2017 / 06 /…
rofrol

54

다음과 같이 webpack 내에서 WebStorm 2017.2의 별칭을 설정했습니다.

enter image description here


2
효과가있다. 파일에는 module.exports = {resolve : {alias : { '@utils': path.resolve (__ dirname, '../utils/')}}}가 포함되어야합니다. 또한 변경 사항을 적용하려면 WebStorm을 다시 시작해야했습니다.
Alexander

1
감사! 그것은 PhpStorm 2019.1 저를 도왔다
Илья Зеленько

이 답변을 우수 답변으로 표시해야합니다. 감사.
Moein Alizadeh

이것은 나를 도왔습니다
TomTomSamSam 19

감사! 마지막으로이 성가신 문제에 대한 몇 가지 해결책입니다.
Alberto Perez

34

기록을 위해 : PHPSTORM 에서 laravel mix로 작업 과 같이 webpack.config.js 파일을 별도로 생성하여이 문제를 해결할 수있었습니다.

const path = require('path')
const webpack = require('webpack')

module.exports = {
  ...
  resolve: {
    extensions: ['.js', '.json', '.vue'],
    alias: {
      '~': path.resolve(__dirname, './resources/assets/js')
    }
  },
  ...
}

그런 다음 webpack.mix.js에서 다음과 같이 가져옵니다.

const config = require('./webpack.config')
...
mix.webpackConfig(config)

설정> 언어 및 프레임 워크> 자바 스크립트> 웹팩에서 PhpStorm의 구성에서 웹팩 구성 파일이 올바르게 지정되었는지 확인하십시오.


1
프로젝트에서 실제로 웹팩을 사용하지 않고 PHPStorm에게 별칭을 해결하는 방법을 가르치기 위해이 두 파일을 단독으로 설정하려는 사용자의 상황을 고려하십시오. 그런 사람들은 webpack.mix.js 파일이 실제로이 목적을 위해 작동하도록하기 위해 "..."에 무엇이 들어가야하는지 알지 못할 것입니다. 특히 단순히 "..."를 제거하면 해당 mix기호가 IDE에 의해 해결되지 않은 것으로보고되어 실제로 작동하지 않을 것이라는 강력한 힌트입니다. "혼합"기호가 어떤 식 으로든 필요 / 가져온 위치에 빠졌지 만 매우 중요한 줄이 있습니다. 답변에 추가하십시오.
Szczepan Hołyszewski

20

사용자 지정 경로를 정의 할 수 있으므로 WebStorm / PhpStorm이 별칭을 이해할 수 있습니다. 그러나 별칭과 동일한 지 확인하십시오. 루트 디렉토리에 파일을 만들고 다음과 같이 이름을 지정합니다. webStorm.config.js(어떤 js파일 이든 괜찮습니다). 그런 다음 내부 경로를 구성하십시오.

System.config({
  "paths": {
    "components/*": "./src/components/*",
    "core/*": "./src/core/*",
    ...
  }
});

WebStorm / PhpStorm은 System자체 모듈로 인식 하고이 파일을 구성으로 취급합니다.


1
이것은 실제로 작동합니다! Rollup + Svelte의 프로젝트에 정말 도움이되었습니다!
joycollector

1
감사. 효과가있다. Q :이 파일에 사용할 수있는 전체 옵션에 대한 문서를 알고 있습니까?
Mojtaba Hn

8

이것은 주석으로 답변되지만 사람들이 주석을 파고 정보 만 연결하는 것을 저장하기 위해 다음과 같습니다.

WS2017.2부터이 작업은 자동으로 수행됩니다 . 정보는 여기에 있습니다 .

이에 따라 웹 스톰은 webpack.config프로젝트의 루트에 포함 된 별칭을 자동으로 해결합니다 . 사용자 지정 구조가 있고 webpack.config루트 폴더에없는 경우 이동하여 Settings | Languages & Frameworks | JavaScript | Webpack필요한 구성으로 옵션을 설정합니다.

참고 : 대부분의 설정에는 또는 버전 base을 호출하는 구성이 있습니다. 이것이 제대로 작동하려면 webstorm에 dev one을 사용하도록 지시해야합니다 .devprod


2
Webpack 별칭을 사용하지 않으면 작동하는 것 같습니다. @src폴더 의 별칭으로 사용 하고 있지만 Webstorm을 내 구성으로 지정한 후에도 여전히 가져 오기를 올바르게 해결하지 못합니다. 그러나 src폴더를 Resource Root로 표시하면 예상대로 작동했습니다. Webstorm이 별칭을 처리 할 수 ​​있다면 좋겠지 만 별 문제는 아닙니다.
dericcain

당신과 같이 별칭에 대한 기호를 사용하고 있습니다 '@': '../src'). 또한 웹팩 구성에 하나의 파일을 사용하고 있습니까? 무엇이 다른지 궁금합니다. 감사!
dericcain

3
내 한 가지 예는 '@': path.resolve(__dirname, '../src/components'). 여러 개의 파일을 사용하여 webpack.base.conf.js다음 devprod버전. 그들은 차례로와 config 폴더를 호출 index.js, dev.env.js하고 prod.env.js. 나는 webpack.dev.conf.js파일 을 보도록 웹 스톰을 가리킨다 .
webnoob

2
내 설정은 매우 유사하며 (vue-webpack-pwa) .dev.conf트릭 을 가리 킵니다 . 가리키는 .base.conf것이 작동하지 않았습니다. 좋은 전화!
dericcain

나는 이것이 문제를 열어야 할 필요가 있다고 생각합니다. 작동하는지 확인할 수는 있지만 종종 열면 모든 웹팩 별칭이 해결되지 않습니다. 나는 "무효화 캐시 및 다시 시작"할, 그리고 광고로 작동
willredington315

7

지금 말고 반응 프로젝트의 파일에 대한 경로 별칭도 사용했습니다. 가져 오기 이름은 더 짧았지만 웹 스톰의 정적 검사와 완성 기능에서 많은 것을 잃었습니다.

나중에 코드를 3 단계 수준으로 낮추고 공통 부분에 대해 단일 수준으로 낮추기로 결정했습니다. webstom의 경로 완성 기능은 (ctrl + space)입력 오버 헤드를 줄이는 데 도움이됩니다. 프로덕션 빌드는 더 긴 이름을 사용하지 않으므로 최종 코드에서 거의 차이가 없습니다.

별칭에 대한 귀하의 결정을 재고 해 주시기 바랍니다. node_modules 및 자신의 코드에서 오는 모듈의 의미 론적 의미를 풀고 코드를 이해하기 위해 별칭 파일을 반복해서 참조하는 것은 훨씬 더 큰 오버 헤드입니다.


1
이것이 더 나은 대답입니다. 상대 경로는 성가 시지만 경로 별칭의 편리함은 유용한 IDE 기능을 잃을 가치가 없습니다.
thewoolleyman

3

PHPStorm (현재 2017.2 사용)에서 별칭과 관련하여 웹팩 구성이 제대로 작동하도록 할 수 없었습니다.

내 수정은 기본 설정의 "디렉토리"섹션을 사용하는 것과 관련이 있습니다. 별칭이 참조하는 각 폴더를 소스 루트로 표시 한 다음 각각에 대한 속성 드롭 다운을 클릭하고 별칭을 "패키지 접두사"로 지정해야했습니다. 이로 인해 모든 것이 연결되었습니다.

디렉토리 섹션이 WebStorm에 있는지 확실하지 않지만, 존재한다면 가져 오기 별칭이 작동하도록하는 확실한 방법 인 것 같습니다.


2

어려움을 겪고있는 사람을 위해 : 경로를 올바르게 해석하려면 Idea (Websorm)의 첫 번째 인수로 path.resolve ()를 "__dirname"으로 호출해야합니다.

Idea (Websorm)에서 작동합니다.

alias: {
    '@someAlias': pathLib.resolve(__dirname, 'path/to/directory')
}

Idea (Websorm)에서 작동하지 않습니다 (유효한 웹팩 별칭 인 동안) :

alias: {
    '@someAlias': pathLib.resolve('path/to/directory')
}

1
Webstorm이 @someAlias올바르게 인식하게하려면 어떻게해야 합니까?
Dave Johansen 19 년

별칭을 정의한 파일은 어디에 있습니까? 어떤 파일에서?
Daniel

2

Webstorm은 module.exports함수를 반환하는 경우 webpack.config를 읽을 수 없습니다 . 예를 들면

module.exports = function (webpackEnv) {
  return {
    mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development',
    ...
 }
}

구성 파일을 확인하십시오. 이로 인해 문제가 발생할 수 있습니다.


1

jsconfig.js프로젝트 루트에 추가

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "~/*": ["./src/*"]
    }
  }
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.