Alias de ruta para importaciones en WebStorm
Uso alias de ruta de webpack para cargar el módulo ES6.
Por ejemplo, Si defino un alias para utils
en lugar de algo comoimport Foo from "../../../utils/foo"
, Puedo hacerimport Foo from "utils/foo"
El problema es que una vez que empiezo a usar alias, WebStorm pierde la pista de la importación y me quedo con advertencias y sin autocompletado.
¿Hay alguna manera de instruir a WebStorm para que use tales alias?
7 answers
[Respuesta obsoleta. A partir de WS2017. 2 Webstorm automáticamente analiza y aplica la configuración de Webpack (ver comentario @anstarovoyt)]
Sí, la hay.
De hecho, Webstorm no puede analizar y aplicar automáticamente la configuración de Webpack, pero puede configurar alias de la misma manera.
Solo tiene que marcar la carpeta padre de "utils" (en su ejemplo) como una raíz de recursos (haga clic con el botón derecho, marque el directorio como raíz de recursos).
Acabamos de hacer con la siguiente estructura:
/src
/A
/B
/C
Tenemos unas carpetas B y C declaradas como alias en Webpack. Y en Webstorm marcamos " src "como"Raíz de recursos".
Y ahora podemos simplemente importar:
import A/path/to/any/file.js
En lugar de
import ../../../../../A/path/to/any/file.js
Mientras aún tenga Webstorm correctamente analizando e indexando todo el código, enlace a archivos, autocompletado, etc...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-26 14:58:08
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 18:52:38
No en este momento, también estábamos usando alias de ruta para los archivos en nuestro proyecto react. Los nombres de importación eran más cortos, pero perdimos mucho en la comprobación estática de webstorm, así como las características de finalización.
Más tarde se nos ocurrió la decisión de reducir el código a solo 3 niveles de profundidad, así como un solo nivel para las partes comunes. La función de finalización de ruta de webstom (ctrl + space)
incluso ayuda a reducir la sobrecarga de escritura. La construcción de producción no utiliza nombres más largos, por lo que apenas hace ninguna diferencia en el código final.
Sugeriré que reconsidere su decisión sobre los alias. Perder el significado semántico de los módulos que vienen de node_modules y su propio código, así como hacer referencia a los archivos de alias una y otra vez para dar sentido a su código, es una sobrecarga mucho mayor.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-23 20:34:10
Para el registro: en PHPSTORM, trabajando con laravel mix, logré resolver esto creando un webpack.config.archivo js por separado como:
const path = require('path')
const webpack = require('webpack')
module.exports = {
...
resolve: {
extensions: ['.js', '.json', '.vue'],
alias: {
'~': path.resolve(__dirname, './resources/assets/js')
}
},
...
}
Y luego importarlo en el webpack.mezcla.js like:
const config = require('./webpack.config')
...
mix.webpackConfig(config)
Asegúrese de que el archivo de configuración de webpack esté apuntado correctamente en la configuración de PhpStorm en: Settings > Languages & Frameworks > Javascript > Webpack
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-03 16:02:59
Esto se responde en un comentario, pero para evitar que las personas caven en comentarios y enlacen solo información, aquí está:
A partir de WS2017.2 esto se hará automáticamente. La información está aquí.
De acuerdo con esto, webstorm resolverá automáticamente los alias que se incluyen dentro de la webpack.config
en la raíz del proyecto. Si tiene una estructura personalizada y su webpack.config
no está en la carpeta raíz, vaya a Settings | Languages & Frameworks | JavaScript | Webpack
y establezca la opción en la configuración que requerir.
Nota: La mayoría de las configuraciones tienen una configuración base
que luego llama a una versión dev
o prod
. Para que esto funcione correctamente, necesita decirle a webstorm que use el dev.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 16:57:33
En PhpStorm (usando 2017.2 actualmente), no he podido obtener configuraciones de webpack para que funcionen correctamente en lo que respecta a los alias.
Mi corrección implica usar la sección "Directorios" de la configuración principal. Solo tenía que marcar cada carpeta referenciada por un alias como raíz de fuentes, luego hacer clic en el menú desplegable propiedades para cada una y especificar el alias como un "prefijo de paquete". Esto hizo que todo se vinculara para mí.
No estoy seguro de si la sección Directorios existe en WebStorm, pero si lo hace, esto parece ser un método infalible para hacer funcionar los alias de importación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 19:01:36
Para cualquiera que esté luchando: camino.se debe llamar a resolve () con el primer argumento "__dirname" para que Idea (Websorm) pueda resolver la ruta correctamente.
Funcionará para Idea (Websorm):
alias: {
'@someAlias': pathLib.resolve(__dirname, 'path/to/directory')
}
No funcionará para Idea (Websorm) (aunque sigue siendo un alias de webpack válido):
alias: {
'@someAlias': pathLib.resolve('path/to/directory')
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-28 12:41:22