Bí danh đường dẫn để nhập trong WebStorm


83

Tôi sử dụng bí danh đường dẫn webpack để tải mô-đun ES6.

Ví dụ: Nếu tôi xác định một bí danh utilsthay vì một cái gì đó như
import Foo from "../../../utils/foo", tôi có thể làm
import Foo from "utils/foo"

Vấn đề là khi tôi bắt đầu sử dụng bí danh, WebStorm sẽ mất theo dõi quá trình nhập và tôi bị bỏ lại với các cảnh báo và không có tự động hoàn thành.

Có cách nào để hướng dẫn WebStorm sử dụng các bí danh như vậy không?

Câu trả lời:


125

Có, có.

Trên thực tế, Webstorm không thể tự động phân tích cú pháp và áp dụng cấu hình Webpack, nhưng bạn có thể thiết lập bí danh theo cách tương tự.

Bạn chỉ cần đánh dấu thư mục mẹ của "utils" (trong ví dụ của bạn) là thư mục gốc (nhấp chuột phải, đánh dấu thư mục là / resource root).

nhấp chuột phải vào thư mục

Chúng tôi vừa quản lý để thực hiện với cấu trúc sau:

/src
    /A
    /B
    /C

Chúng ta có các thư mục AB và C được khai báo là bí danh trong Webpack. Và trong Webstorm, chúng tôi đã đánh dấu "src" là "Nguồn gốc".

Và bây giờ chúng ta có thể nhập:

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

thay vì

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

trong khi vẫn có Webstorm phân tích cú pháp chính xác và lập chỉ mục tất cả mã, liên kết đến tệp, tự động hoàn thành, v.v.


2
điều này sẽ phá vỡ mọi thứ một cách hiệu quả khi không trực tiếp xây dựng từ Webstorm
maddrag0n

2
Tôi đã thử trong WebStorm 2016.2.3, nhưng giải pháp này không hoạt động.
Zation

2
và những gì về nhập khẩu trong angle2 import { Component } from '@angular/core', điều đó cũng được giải quyết. Làm cách nào tôi có thể triển khai atđể làm rõ hơn rằng đường dẫn đó là một bí danh?
Hitmands

6
@Toosick xem bài đăng trên blog này blog.jetbrains.com/webstorm/2017/06/…
anstarovoyt

3
Điều gì về nhiều thư mục và nhiều cấu hình webpack? Có lẽ vì lý do này không hoạt động với tôi: "Theo mặc định, WebStorm sẽ phân tích tệp cấu hình webpack trong thư mục gốc của dự án, nhưng bạn có thể chọn tệp khác trong Tùy chọn | Ngôn ngữ & Khung công tác | JavaScript | Webpack" blog.jetbrains.com / webstorm / 2017/06 /…
rofrol 19/07/17

54

Tôi đã quản lý để thiết lập bí danh cho WebStorm 2017.2 trong webpack như sau:

nhập mô tả hình ảnh ở đây


2
Nó hoạt động. Tệp phải bao gồm module.exports = {giải quyết: {alias: {'@utils': path.resolve (__ dirname, '../utils/')}}}. Ngoài ra, tôi đã phải khởi động lại WebStorm để áp dụng các thay đổi.
Alexander

1
Cảm ơn! Nó đã giúp tôi trong PhpStorm 2019.1
Илья Зеленько

Chúng ta nên đánh dấu câu trả lời này cho câu trả lời tốt nhất. Cảm ơn.
Moein Alizadeh

này đã giúp tôi
TomTomSamSam

Cảm ơn! Cuối cùng là một số giải pháp cho vấn đề khó chịu này.
Alberto Perez

34

Đối với bản ghi: trong PHPSTORM , làm việc với laravel mix , tôi đã giải quyết được điều này bằng cách tạo một tệp webpack.config.js riêng biệt như:

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

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

Và sau đó nhập nó vào webpack.mix.js như:

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

Đảm bảo rằng tệp cấu hình webpack được trỏ chính xác trong cấu hình của PhpStorm trong: Cài đặt> Ngôn ngữ & Khung công tác> Javascript> Webpack


1
Vui lòng xem xét tình huống của những người dùng không thực sự sử dụng webpack trong dự án của họ và muốn thiết lập hai tệp đó RẤT RẤT cho mục đích dạy PHPStorm cách giải quyết bí danh. Những người đó sẽ không biết những gì nên đi trong "..." để làm cho tệp webpack.mix.js thực sự hoạt động cho mục đích này. Cụ thể, nếu tôi chỉ đơn giản xóa "...", mixbiểu tượng được IDE báo cáo là chưa được giải quyết, đây là một gợi ý mạnh mẽ rằng nó sẽ không thực sự hoạt động. Có những dòng bị thiếu nhưng cực kỳ quan trọng trong đó ký hiệu "kết hợp" được yêu cầu / nhập bằng cách nào đó. Vui lòng thêm chúng vào câu trả lời của bạn.
Szczepan Hołyszewski vào

20

Bạn có thể xác định các đường dẫn tùy chỉnh, vì vậy WebStorm / PhpStorm có thể hiểu bí danh của bạn. Nhưng hãy đảm bảo rằng chúng giống hệt với bí danh của bạn. Tạo tệp trong thư mục gốc của bạn và gọi nó như sau: webStorm.config.js(bất kỳ jstệp nào cũng được). Sau đó, định cấu hình các đường dẫn của bạn bên trong:

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

WebStorm / PhpStorm sẽ nhận dạng Systemlà mô-đun riêng của nó và sẽ coi tệp này là cấu hình.


1
Điều này thực sự hoạt động! Thực sự đã giúp tôi với dự án trên Rollup + Svelte!
joycollector

1
cảm ơn. nó hoạt động. Hỏi: Bạn có biết bất kỳ tài liệu nào về các tùy chọn đầy đủ có sẵn cho tệp này không?
Mojtaba Hn

8

Điều này được trả lời trong một bình luận nhưng để tiết kiệm mọi người đào sâu vào bình luận và chỉ liên kết thông tin, đây là:

Kể từ WS2017.2, điều này sẽ được thực hiện tự động . Thông tin ở đây .

Theo đó, webstorm sẽ tự động giải quyết các bí danh được bao gồm trong thư webpack.configmục gốc của dự án. Nếu bạn có cấu trúc tùy chỉnh và cấu trúc của bạn webpack.configkhông có trong thư mục gốc, hãy truy cập Settings | Languages & Frameworks | JavaScript | Webpackvà đặt tùy chọn thành cấu hình bạn yêu cầu.

Lưu ý: Hầu hết các thiết lập đều có basecấu hình sau đó gọi một devhoặc prodphiên bản. Để điều này hoạt động bình thường, bạn cần yêu cầu webstorm sử dụng dev .


2
Điều này dường như hoạt động trừ khi bí danh Webpack được sử dụng. Tôi đang sử dụng @làm bí danh cho srcthư mục của mình , nhưng ngay cả sau khi trỏ Webstorm đến cấu hình của tôi, nó vẫn không giải quyết chính xác việc nhập của tôi. Tuy nhiên, sau khi tôi đánh dấu srcthư mục là Nguồn gốc, nó hoạt động như mong đợi. Sẽ rất tuyệt nếu Webstorm có thể xử lý các bí danh, nhưng không có vấn đề gì lớn.
dericcain

Bạn có sử dụng một biểu tượng cho một bí danh như vậy: '@': '../src'). Ngoài ra, bạn đang sử dụng một tệp cho cấu hình gói web của mình hay nhiều tệp? Tự hỏi điều gì là khác biệt. Cảm ơn!
dericcain

3
Một ví dụ của tôi là '@': path.resolve(__dirname, '../src/components'). Tôi sử dụng nhiều tệp, webpack.base.conf.jssau đó devprodcác phiên bản. Họ lần lượt gọi một thư mục cấu hình với index.js, dev.env.jsprod.env.js. Tôi trỏ webstorm của mình để xem webpack.dev.conf.jstệp.
webnoob

2
Thiết lập của tôi rất giống (vue-webpack-pwa) và chỉ nó vào .dev.confmẹo đã làm. Trỏ đến .base.confkhông hoạt động. Tốt cuộc gọi!
dericcain

Tôi nghĩ rằng điều này có thể cần một vấn đề để được mở. Tôi có thể xác nhận rằng nó hoạt động nhưng đôi khi tôi sẽ mở nó ra và tất cả các bí danh webpack đều chưa được giải quyết. Tôi thực hiện "Vô hiệu hóa bộ nhớ cache và khởi động lại" và nó hoạt động như được quảng cáo
willredington315

7

Không phải lúc này , Chúng tôi cũng đang sử dụng bí danh đường dẫn cho các tệp trong dự án phản ứng của chúng tôi. Tên nhập ngắn hơn nhưng chúng tôi đã mất nhiều công sức kiểm tra tĩnh webstorm cũng như các tính năng hoàn thành.

Sau đó, chúng tôi đã đưa ra quyết định giảm mã xuống chỉ còn 3 cấp độ sâu, cũng như một cấp độ duy nhất cho các phần chung. Tính năng hoàn thành đường dẫn của webstom (ctrl + space)thậm chí còn giúp giảm chi phí nhập liệu. Phiên bản sản xuất không sử dụng tên dài hơn, vì vậy hầu như không tạo ra bất kỳ sự khác biệt nào trong mã cuối cùng.

Tôi sẽ đề nghị hãy xem xét lại quyết định của bạn về bí danh. Bạn mất ý nghĩa ngữ nghĩa của các mô-đun đến từ node_modules và mã của riêng bạn, cũng như tham chiếu các tệp bí danh lặp đi lặp lại để hiểu về mã của bạn, là một chi phí lớn hơn nhiều.


1
Đây là câu trả lời tốt hơn. Các đường dẫn tương đối gây khó chịu, nhưng sự tiện lợi của bí danh đường dẫn không đáng để làm mất chức năng IDE hữu ích.
thewoolleyman

3

Trong PHPStorm (hiện đang sử dụng 2017.2), tôi không thể có được cấu hình webpack hoạt động bình thường liên quan đến bí danh.

Cách khắc phục của tôi liên quan đến việc sử dụng phần "Thư mục" của cài đặt chính. Tôi chỉ cần đánh dấu từng thư mục được tham chiếu bởi bí danh là thư mục gốc, sau đó nhấp vào menu thả xuống thuộc tính cho từng thư mục và chỉ định bí danh đó là "Tiền tố gói". Điều này làm cho mọi thứ liên kết với tôi.

Không chắc liệu phần Thư mục có tồn tại trong WebStorm hay không, nhưng nếu có thì đây có vẻ là một phương pháp chống lừa để làm cho bí danh nhập hoạt động.


2

Đối với bất kỳ ai đang gặp khó khăn: path.resolve () phải được gọi với đối số đầu tiên "__dirname" cho Idea (Websorm) để có thể phân giải đường dẫn một cách chính xác.

Sẽ làm việc cho Idea (Websorm):

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

Sẽ không hoạt động cho Idea (Websorm) (trong khi vẫn là bí danh webpack hợp lệ):

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

1
Làm cách nào để Webstorm nhận dạng @someAliaschính xác?
Dave Johansen

Tập tin bạn đã xác định bí danh ở đâu? Trong tệp nào?
Daniel

2

Webstorm không thể đọc webpack.config nếu module.exportstrả về một hàm. Ví dụ

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

Kiểm tra tệp cấu hình của bạn, có thể nguyên nhân này khiến bạn gặp sự cố.


1

thêm jsconfig.jsvào gốc dự án của bạn

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.