使用 Webpack 波形符别名时通过 Vim 中的“gf”解析 JavaScript 模块

2024-04-25

我是使用波浪号的 Vue.js 项目的新成员 (~) 模块导入中的符号,如

import WhateverApi from '~/api/whatever';

项目存储库包含所有类型的文件:Vagrant 机器、Laravel 后端应用程序、配置文件和 Vue.js SPA。后者位于嵌套文件夹结构中(resources/assets/js/),它应该被解释为项目根,因此~.

使用 Vim,我习惯于能够通过以下方式跳转到链接文件gf。当我在上面显示的路径上执行此操作时,Vim 抱怨该文件不存在,因为它可能将波浪号(某种程度上正确)解释为用户的主文件夹。

谷歌搜索没有结果,主要是因为我不知道到底要搜索什么。这似乎是 Webpack 正在做的一些魔法。由于其他团队成员使用WebStorm/PHPStorm,因此没有这个问题。

如何让 Vim 在项目范围内正确解析路径?

更新一个例子:

Webpack 有一个别名设置,允许将任何路径定义为在源代码文件中使用的别名。它看起来像这样:

resolve: {
    alias: {
        vue$: 'vue/dist/vue.esm.js',
        '~': path.resolve(__dirname, 'resources/assets/js'),
        sass: path.resolve(__dirname, 'resources/assets/sass'),
    },
    extensions: ['*', '.js', '.vue', '.json'],
},

忽略$vue关键,它特定于带有 Webpack 的 Vue.js。~ and sass很有趣。第一个基本上是一个替代过滤器,可以交换每个过滤器~在路径中resources/assets/js。同样对于sass与它相应的路径。然而,进口声明有所不同。下面是一个 Vue 单文件组件的示例,其中包含两个 import 语句:

<template>
    <div>
        <p>Some content.</p>
    </div>
</template>

<script>
    import WhateverApi from '~/api/whatever';

    export default {};
</script>

<style lang="scss" scoped>
    @import '~sass/variables/all';
</style>

现在,当使用gf,如果它能够根据以下规则解决这些(奇怪的)组合,那就太棒了:

  • 路径开头为~/应该取代~ to resources/assets/js并尝试通过附加扩展名来查找文件.js, .vue and .json.
  • 路径开头为~sass应该取代~ to resources/assets/sass并尝试通过附加扩展名来查找文件.scss.

我知道这涉及到——并且发生在我加入团队之前。有一个有趣的项目试图简化这个(https://github.com/davidosomething/vim-enhanced-resolver https://github.com/davidosomething/vim-enhanced-resolver)但不幸的是它似乎被破坏了,因为它在尝试解析现有路径时抛出错误。

任何帮助是极大的赞赏。


谷歌搜索没有结果,主要是因为我不知所措 到底要搜索什么。

对于 Vim 帮助,请首先尝试 Vim 帮助本身。例如,哪个 你正在使用命令吗?如果是gf,检查帮助gf看看它是如何工作的:

:h gf
[count]gf       Edit the file whose name is under or after the cursor.
                Mnemonic: "goto file".
                Uses the 'isfname' option to find out which characters
                are supposed to be in a file name.  Trailing
                punctuation characters ".,:;!" are ignored. Escaped
                spaces "\ " are reduced to a single space.
                Uses the 'path' option as a list of directory names to
                look for the file.  See the 'path' option for details
                about relative directories and wildcards.
                Uses the 'suffixesadd' option to check for file names
                with a suffix added.
                If the file can't be found, 'includeexpr' is used to
                modify the name and another attempt is done.

您还可以检查:h 'includeexpr'。例如,这个 将扩展一个初始的~ to resources/assets/js:

set inex=substitute(v:fname,'^\\~','resources/assets/js','')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Webpack 波形符别名时通过 Vim 中的“gf”解析 JavaScript 模块 的相关文章

  • Cesium - 为什么 scene.pickPositionSupported 为 false

    我最终试图在我的房子顶部画一个多边形 我能做到 问题是 在缩小 放大和旋转 或相机移动 时 多边形不会粘在我房子的顶部 我得到了很大的帮助这个答案 https stackoverflow com a 35992537 1735836 所以
  • Cloud Functions for Firebase - 创建新用户时写入数据库

    我对 Firebase 和 javascript 语言的 Cloud Functions 非常陌生 我试图在每次创建用户写入数据库时 添加一个函数 这是我的代码 const functions require firebase functi
  • 为什么 Webpack 忽略我的 CSS 文件?

    我正在尝试让 webpack 将我的 CSS 文件 使用 PostCSS 编译为单独的文件 从文档来看 这似乎正是 ExtractTextPlugin 应该做的 但是 我无法让 webpack 对我的 CSS 文件执行任何操作 相关项目结构
  • 使用 proto.io 让开关在 IE8 中工作

    Proto io 为使用 CSS 的开 关切换按钮提供了一个非常好的解决方案 但是 它在 IE8 中不起作用 http proto io freebies onoff http proto io freebies onoff 有谁知道如何用
  • Socket.IO 消息不更新 Angular 变量

    我有一个 socket io 客户端 服务器设置 并在客户端上运行 AngularJS Server js var io require socket io server io on connection function socket s
  • 在表单提交时发送 div 的值

    我正在尝试提交一个包含几个不同输入的表单 这些输入都工作正常 然而 输入之一是文本区域 某种程度 我必须将其更改为内容可编辑的 div 主要是因为我创建了自己的粗体 斜体和下划线按钮 这些按钮不适用于普通文本区域 问题是提交时的表单没有将文
  • Javascript:使用箭头键导航表格输入

    我正在为客户制作 HTML 成绩册 我使用 PHP 生成成绩册 然后输出一个 HTML 表 如下例所示 每个 td 包含一个带有 td
  • JS:按每个类别的最大值过滤对象数组

    什么是最有效 优雅的方式来实现类似sql的过滤效果 我想过滤它们并只获取某个组中最大值的对象 这是我的代码 它可以工作 但可能不是最好的方法 uniqueValues arr gt new Set arr getMaxTimeOf arr
  • 将画布输出图像调整为特定尺寸(宽度/高度)

    我有一个大画布 5000x5000 我想拍一张照片并在客户端创建一个缩略图 我可以使用捕获图像canvas toDataURL但我该如何调整它的大小 我必须创建一个新的吗
  • jQuery - 解析 JSON 数据 - 变量名称遇到问题

    我第一次深入研究 JSON 数据的使用 不过我有一些使用 jQuery 的经验 我发布到此 URL tumblr api jyoseph com api read json 我想做的是输出返回的 json 到目前为止我所拥有的 docume
  • Angular 2 - 检查图像 URL 是否有效或损坏

    我正在从 API 获取大量图像 URL 并将它们显示在 Angular 2 Web 应用程序中 有些 URL 已损坏 我想用本地存储在我的网络服务器上的默认图片替换它们 有人建议如何测试 url 并在状态代码 404 的情况下替换损坏的图像
  • Excel 到 JSON 的 JavaScript 代码?

    我想将excel表格数据转换为json 它必须是动态的 因此有一个上传按钮 用户可以在其中上传 Excel 工作表 然后将数据转换为 json 您能给我提供 javascript 代码吗 我尝试了 SheetJS 但无法弄清楚 我更喜欢直接
  • 为什么控制台不显示从选择器返回的 jQuery 对象的方法?

    我知道如果我输入 正文 我得到一个 jQuery 对象 然而 在 chrome 的控制台上 我只能看到 jQuery 对象的内部数组 尽管事实上 jQuery 方法是可以访问的 例如 body hide 为什么控制台没有向我显示所有可访问的
  • 如何防止 CouchDB 在更新简单计数器时创建文档修订

    我想将计数器存储在 CouchDB 文档中 并在每个页面视图上递增 CouchDB 将创建本文档的完整修订版 只需 1 次计数器更新 这样会不会占用太多空间 考虑到我一天的点击量为 100 万次 我一天内可能会查看该文档的 100 万次修订
  • Javascript 沙箱模式示例实现

    在 Stoyan Stefanov 的伟大著作 JavaScript Patterns 的第 101 页中 他解释了沙箱模式 我非常喜欢他的书 但我真的错过了一些现实生活中的例子 然后更好地理解他所谈论的内容 我正在寻找一个现实生活中的工作
  • grunt:如何生成 HTML 形式的 jshint 输出

    我正在尝试使用 grunt 运行 jshint 这可行 但现在我希望输出为 HTML 这是我的 grunt 文件 module exports function grunt Project configuration grunt initC
  • Javascript Concat 多维数组

    我正在尝试连接一个多维数组 以便可以迭代并显示所有数据 有一篇关于如何访问嵌套数据的非常好的帖子here https stackoverflow com questions 11922383 access process nested ob
  • 仅当锚点尚未存在时,正则表达式才用锚点替换网址

    我以前见过类似的问题 但没有一个有效的解决方案 我试图用锚标记替换页面上的所有网址 但仅限那些不在锚标记内的网址 so http google com http google com应替换为 a href http google com h
  • Materialize CSS,显示自动完成芯片的图像

    文档物化芯片 http materializecss com chips html展示您可以用图像制作芯片 div class chip img src images yuna jpg alt Contact Person Jane Doe
  • JS:如何将此字符串转换为日期对象

    该字符串是 2012 04 13T22 59 33 我努力了Date parse str Y m dTH i s 这对我不起作用 我不确定 T 代表什么 只需将其作为日期的参数即可 var date new Date 2012 04 13T

随机推荐