【问题标题】:How to ignore changes in some folders when developing locally?本地开发时如何忽略某些文件夹的变化?
【发布时间】:2014-11-23 11:17:58
【问题描述】:

我正在使用适用于 Google App Engine 的 Go SDK(它使用 Python SDK 的某些部分并在运行 goapp serve 时调用 dev_appserver.py)。默认情况下,它似乎会监视 all 文件和文件夹的更改。我在静态文件夹中有一堆凉亭依赖项,SDK 抱怨说它无法观看那么多文件。

如何设置开发服务器忽略文件夹中的更改?

编辑。阅读devappserver2/watcher_common.py,似乎忽略了以. 开头的目录。我想在最坏的情况下,我可以在文件夹前面加上.,但这是一种黑客行为。应该有配置选项,我好像没找到。

【问题讨论】:

  • 编辑监视程序文件,以便过滤掉您不需要监视的文件。我已经编辑了 max_file_watched 变量。
  • @PaulCollingwood 当然可以,但更新 SDK 时可能会中断。我想找到一个不需要更改 SDK 工具的选项。
  • 目前似乎没有排除某些文件的选项。我希望skip_files集最终会被排除在观看之外。
  • @PaulCollingwood 太可悲了。感谢您的回答。
  • 还是这样吗?现在已经快一年了?有点重要的功​​能,就像所有类型的 npm 文件夹和其他库文件夹一样,占用了大量的观察者容量

标签: google-app-engine


【解决方案1】:

使用:

Google Cloud SDK 197.0.0
app-engine-python 1.9.68
app-engine-python-extras 1.9.63
bq 2.0.31
core 2018.04.06
gsutil 4.30

App Engine Docs,当从命令行运行时,您可以将参数--watcher_ignore_re 传递给dev_appserver.py

示例

dev_appserver.py app.yaml --watcher_ignore_re="(.*\.data|.*\.vscode)"

这将忽略对 .data.vscode 目录的更改,相对于运行命令的目录 (CWD)。


2018 年 6 月 7 日编辑。

使用:

Google Cloud SDK 204.0.0
app-engine-python 1.9.70
app-engine-python-extras 1.9.69
bq 2.0.34
core 2018.06.04
gsutil 4.31

watcher_ignore_re 似乎不再工作了。

相反,对我有用的是在app.yaml 文件中添加skip_files 指令,如文档中的here 所述。 dev_appserver.py 命令将遵守本节中的定义。

示例

项目内部app.yaml

...
...
skip_files:
# default from GAE
- ^(.*/)?#.*#$
- ^(.*/)?.*~$
- ^(.*/)?.*\.py[co]$
- ^(.*/)?.*/RCS/.*$
- ^(.*/)?\..*$

# custom entries

# dev-related files
- ptvsd
- pydev_startup.py
- .pylintrc
- .data
- .vscode

# version control files
- .git
- .gitignore
- .gitattributes

# non-application files
- README.md
- ^(.*/)?.*\.mwb(.bak)?$ # workbench models

现在,使用命令运行项目:

dev_appserver.py app.yaml

【讨论】:

  • 对于那些面临在 Windows my answer 上未实现对 watcher_ignore_reskip_files_re 的支持的人,通过实现的解决方法,它对 Windows 的支持可能很有用
【解决方案2】:

您是正确的,目前没有命令行或配置选项来指定要被观察者忽略的文件/目录。

。 (点)破解

如您所见,以. 开头的文件和目录将被忽略。对于许多 *nix 系统来说,这是一个相当标准的约定。但是对于具有许多本地依赖项的 python 项目,它并不是真正可扩展的。

修改watcher文件

您可以修改此文件,但这也是不利的,因为它会进行非常脆弱的更改,并且如果更新覆盖了文件,则很容易破坏。

除非采用上述解决方法,否则无法实现此目的。我也没有看到在App Engine release notes 中提到这一点。然而,在公共问题跟踪器上有一个 open feature request 让观察者忽略由 skip_files yaml 指令指定的文件。随时为该问题加注星标以获取有关其进展的更新。

编辑:2017 年 1 月 4 日

NPM 3

对于遇到此限制的 NPM 用户,您可能会发现使用 NPM v3 会有所帮助,因为它 resolves dependencies differently

npm3 尝试通过在与需要它的主要依赖项相同的目录中以扁平方式安装一些次要依赖项(依赖项的依赖项)来[减轻深度树和冗余]。

这对于遇到文件观看限制的 Node 用户非常有效。

弗兰肯服务器

Khan Academy 开发了一个名为 Frankenserver 的 App Engine 开发服务器的分支。虽然我自己没有探索过这个选项,但似乎有相当多的支持和最近的更新。从它的自述文件中:

frankenserver 与 vanilla SDK 相比的最大优势在于它如何监视应用程序中的文件以进行更改。它通过 1) 在 Mac OS X 上使用基于 FSEvents 的原生文件观察器和 2) 尊重 app.yaml 中的 skip_files 指令,从而更有效地做到这一点。

虽然这不是 Google 的官方解决方案,但如果此限制严重影响您,它可能是一个值得暂时解决的方法。

【讨论】:

  • 已为功能请求加星标,不幸的是它已加星标 3 年并确认
  • 感谢您提出这个问题。我会调查Issue 9300,看看内部发生了什么。我还将通过一些其他解决方法更新我的答案,这些方法可能在此期间有所帮助。
【解决方案3】:

我发现Issue 9300 中的comment37 对我有用。

以防万一,该链接不再可用。这是评论37:

理论上这段代码现在已经存在,但是有一个错误。它确实使用 skip_files 指令,而不是匹配相对路径, 它使用绝对路径。

如果我有:

skip_files:

- ^node_modules(/.*)?

它将尝试匹配 /Users/myuser/Projects/myproject/node_modules/ 并失败。

添加一个额外的条目应该可以修复它并让它跳过你的 node_modules 目录:

skip_files:

- ^node_modules(/.*)?

- .*node_modules

这是我现在正在使用的 hack-workaround,它至少允许我 无需进入和编辑 gcloud 文件的便利 每次他们重新发布时都直接!

最重要部分的亮点:

skip_files: 
- ^node_modules(/.*)? 
- .*node_modules

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2011-06-20
    • 1970-01-01
    • 2011-09-06
    • 2016-02-13
    • 2017-11-05
    相关资源
    最近更新 更多