禁用webpack对vim.swp文件的监视

7
每次我使用vim打开文件时,webpack都会检测更改并重新编译代码。 Vim会创建临时文件,例如.test.txt.swp,这使得webpack认为项目中有变化。
禁用swp文件创建可以解决问题,但我希望保留swp文件的安全性,不要让浏览器过于频繁地重新加载页面,也不要进行不必要的代码编译。
如何让webpack知道它不应该对.*.swp文件的更改做出反应?
编辑: 实际上,webpack-dev-server会对新的vim交换文件做出反应。只有在即将编译的源文件中存在特定条目时,它才会这样做。这些示例来自导入angular2,但不仅限于此: import '@angular/core'; import '@angular/common';

我认为这是webpack-dev-server的问题,但也有可能是导入库所搜索的内容。https://github.com/webpack/webpack-dev-server/issues/719 - BartBiczBoży
3个回答

13

关于 "webpack" 我一无所知,但你可以使用 'dir' 设置让 Vim 将交换文件存储在单个目录而不是当前目录中。我在我的 vimrc 文件中使用这个设置:

set dir=$HOME/.vim/tmp/swap
if !isdirectory(&dir) | call mkdir(&dir, 'p', 0700) | endif

这也将修复其他工具的问题,以及在版本控制系统中的“悬挂交换文件”等交换文件问题。

如果你想在工具(例如webpack)中忽略Vim交换文件,则需要记住仅忽略 .swp 是不够的;Vim也可能创建扩展名为 .swo.swn 等的交换文件。


3
我的答案是将webpack配置更改如下:
<webpackConfObject>.devServer.watchOptions = {
  ignored: /\.sw.$/
};

模块的 exclude 属性不适用于触发 webpack 开发服务器重新加载页面的文件监视器,但您可以忽略与模式匹配的文件。详情请参见这里

3

您可以根据模式排除文件:

module: {
  loaders: [
    {
      // existing loader config
      exclude: /\.swp$/,
    },
  ]
}

然而,默认情况下不应该将所有文件捆绑在一起,你需要使用一个加载器测试来仅捆绑.js文件(或者你明确需要的任何其他类型的文件,如 .jsx, .css等)。例如,可以这样实现:

module: {
  loaders: [
    {
      test: /.jsx?$/,
      loader: 'babel-loader',
      exclude: [/node_modules/, 'test/', /\.swp$/],
      query: {
        presets: ['es2015', 'react']
      }
    },
    {
      test: /\.css$/,
      loader: "style-loader!css-loader"
    },
  ]
}

所以配置了一种方式,告诉webpack监视所有文件。也许现在你可以查看编辑后的问题,我包含了配置的URL。 - BartBiczBoży
请注意,如果已经存在一个.swp文件,则Vim将创建一个.swo文件,或者如果两个文件都已经存在(尽管这种情况较少),则会创建一个.swn文件,因此最好将正则表达式调整为类似于/\.sw[pno]$/的内容。如果您愿意,可以在此之后继续进行,但是存在超过3个交换文件的情况非常罕见。 - Martin Tournoij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接