Псевдоніми шляху для імпорту в WebStorm


83

Я використовую псевдоніми шляху webpack для завантаження модуля ES6.

Наприклад, якщо я визначаю псевдонім utilsзамість чогось типу
import Foo from "../../../utils/foo", я можу це зробити
import Foo from "utils/foo"

Проблема полягає в тому, що як тільки я починаю використовувати псевдоніми, WebStorm втрачає відстеження імпорту, і мені залишаються попередження та відсутність автоматичного заповнення.

Чи є спосіб доручити WebStorm використовувати такі псевдоніми?

Відповіді:


125

Так, є.

Насправді Webstorm не може автоматично аналізувати та застосовувати конфігурацію Webpack, але ви можете встановити псевдоніми таким же чином.

Вам просто потрібно позначити батьківську папку "utils" (у вашому прикладі) як корінь ресурсу (клацніть правою кнопкою миші, позначте каталог як / root root).

клацніть правою кнопкою миші на папці

Нам просто вдалося зробити наступну структуру:

/src
    /A
    /B
    /C

У нас папки AB та C оголошені псевдонімами у Webpack. А в Webstorm ми позначили "src" як "Корінь ресурсу".

І тепер ми можемо просто імпортувати:

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 проаналізує файл конфігурації веб-пакета в кореневій частині проекту, але ви можете вибрати інший файл у Налаштуваннях | Мови та фреймворки | JavaScript | Веб-пакет
rofrol

54

Мені вдалося налаштувати псевдоніми для WebStorm 2017.2 у веб-пакеті так:

введіть тут опис зображення


2
Це працює. Файл повинен містити module.exports = {вирішення: {псевдонім: {'@utils': path.resolve (__ dirname, '../utils/')}}}. Також мені довелося перезапустити WebStorm, щоб застосувати зміни.
Олександр

1
Дякую! Це допомогло мені в PhpStorm 2019.1
Ілля Зеленько

Ми повинні позначити цю відповідь як найкращу. Дякую.
Moein Alizadeh

цей мені допоміг
TomTomSamSam

Дякую! Нарешті, вирішення цієї надокучливої ​​проблеми.
Альберто Перес

34

Для протоколу: в PHPSTORM , працюючи з сумішшю laravel , мені вдалося це вирішити, створивши файл 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 у: Налаштування> Мови та фреймворки> Javascript> Веб-пакет


1
Будь ласка, розгляньте ситуацію з користувачами, які насправді не використовують webpack у своєму проекті, і хочуть створити ці два файли ЄДИНИМИ для того, щоб навчити PHPStorm вирішенню псевдонімів. Ці люди не знатимуть, що слід ввести в "...", щоб файл webpack.mix.js насправді працював для цієї мети. Зокрема, якщо я просто видалюю "...", mixIDE повідомляє про невирішеність символу, що є сильним натяком на те, що він насправді не буде працювати. Не вистачає, але критично важливих рядків, де символ "суміш" якимось чином потрібний / імпортований. Будь ласка, додайте їх до своєї відповіді.
Щепан Голишевський,

20

Ви можете визначити власні шляхи, щоб WebStorm / PhpStorm міг зрозуміти ваші псевдоніми. Але переконайтеся, що вони ідентичні вашим псевдонімам. Створіть файл у своєму кореневому каталозі і назвіть його приблизно так: webStorm.config.js(будь-який jsфайл буде нормальним). Потім налаштуйте свої шляхи всередині:

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

WebStorm / PhpStorm розпізнає Systemяк власний модуль і буде розглядати цей файл як конфігурацію.


1
Це насправді працює! Дійсно допоміг мені з проектом на Rollup + Svelte!
joycollector

1
Дякую. це працює. З: Чи знаєте ви будь-яку документацію щодо повних опцій, доступних для цього файлу?
Mojtaba Hn

8

На це дається відповідь у коментарі, але щоб заощадити людей, копаючись у коментарях та посилаючи лише інформацію, ось це:

З WS2017.2 це буде зроблено автоматично . Інформація тут .

Відповідно до цього, веб-шторм автоматично вирішує псевдоніми, включені webpack.configдо кореня проекту. Якщо у вас є власна структура, і ви webpack.configне в кореневій папці, перейдіть доSettings | Languages & Frameworks | JavaScript | Webpack і встановіть для параметра необхідну конфігурацію.

Примітка: Більшість установок мають baseконфігурацію, яка потім викликає devабо prodверсію. Щоб це працювало належним чином, вам потрібно сказати webstorm використовувати розробницький .


2
Здається, це працює, якщо не використовується псевдонім Webpack. Я використовую @як псевдонім моєї srcпапки, але навіть після вказівки Webstorm на мою конфігурацію, це все одно не дозволить правильно імпортувати. Однак, як тільки я позначив srcпапку як Resource Root, вона запрацювала як слід. Було б непогано, якби Webstorm міг обробляти псевдоніми, але нічого страшного.
dericcain

Ви використовуєте символ для псевдоніма так: '@': '../src'). Крім того, ви використовуєте один файл для конфігурації веб-пакета, або кілька? Цікаво, що відрізняється. Дякую!
dericcain

3
Одним з прикладів шахти '@': path.resolve(__dirname, '../src/components'). Я використовую кілька файлів, webpack.base.conf.jsа потім devі prodверсії. Вони в свою чергу викликають конфігураційну папку за допомогою 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

Для всіх, хто бореться: path.resolve () потрібно викликати з першим аргументом "__dirname" для Idea (Websorm), щоб мати змогу правильно вирішити шлях.

Працюватиме на Idea (Websorm):

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

Не буде працювати для Idea (Websorm) (поки залишається дійсним псевдонімом веб-пакета):

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

1
Як змусити Webstorm розпізнати @someAliasправильно?
Дейв Йогансен

Де у файлі ви визначили псевдонім? В якому файлі?
Даніель

2

Webstorm не може прочитати webpack.config, якщо module.exportsповертає функцію. Наприклад

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

Перевірте конфігураційний файл, можливо, це спричиняє проблему.


1

додати jsconfig.jsдо кореня вашого проекту

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.