如何在本地开发时忽略某些文件夹中的更改?

时间:2014-11-23 11:17:59

标签: google-app-engine

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

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

修改即可。阅读devappserver2/watcher_common.py,它似乎忽略了以.开头的目录。我想在最糟糕的情况下,我可以在文件夹前加.,但这是一个黑客攻击。应该有一个配置选项,我似乎无法找到它。

3 个答案:

答案 0 :(得分:2)

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

。 (点)黑客

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

修改观察程序文件

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

除了上述解决方法之外,没有办法实现这一目标。我还没有看到在App Engine release notes中提及这一点。但是,公共问题跟踪器上有一个open feature request,让观察者忽略skip_files yaml指令指定的文件。请随意为该问题加注,以了解其进展情况。

编辑:2017年1月4日

NPM 3

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

  

npm3通过以平面方式安装一些辅助依赖项(依赖项的依赖项),在与需要它的主要依赖项相同的目录中,尝试这种[缓解深度树和冗余]。

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

Frankenserver

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

  

frankenserver相对于vanilla SDK的最大优势在于它如何监视应用中的文件以进行更改。它通过以下方式更有效地实现:1)在Mac OS X上使用基于FSEvents的本机文件监视器,2)尊重app.yaml中的skip_files指令。

虽然这不是谷歌的官方解决方案,但如果这种限制严重影响您,那么暂时可能是值得的解决方法。

答案 1 :(得分:2)

使用:

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似乎不再有用了。

相反,对我有用的是在文档中按照here所述的skip_files文件中添加app.yaml指令。 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

答案 2 :(得分:0)

我发现comment37中的Issue 9300适用于我。

如果该链接不再可访问。这是评论37:

  

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

     

所以,如果我有:

     

skip_files:

     

- ^ node_modules(/.*)?

     

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

     

添加其他条目应该修复它,让它跳过你的   node_modules目录:

     

skip_files:

     

- ^ node_modules(/.*)?

     

- 。* node_modules

     

这是我现在使用的黑客解决方法,至少可以让我使用   不需要进入和编辑gcloud文件的便利性   直接每次重新发布!

最重要的部分:

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