在Win7上捆绑Meteor应用程序时出现ENOTEMPTY和EPERM异常?:(

Abi*_*ilW 5 meteor

救命!

我已经和Meteor合作了大约两个月了,而且在我的OSX家庭环境中,一切都在顺利进行.但是我最近把一些代码带到了我们的Windows 7环境中工作,而Meteor在Windows上的表现并不一样.

具体来说,代码捆绑不断变得笨拙.当我对代码库进行更改时,不是刷新旧的.meteor/local目录,而是重新绑定应用程序,它会在服务器控制台中向我发送ENOTEMPTY异常.如果我在任务资源管理器中暂停mongod进程并手动删除.meteor/local目录,我可以重新启动应用程序,它将使用新的代码更改捆绑和部署应用程序.

Running on: http://localhost:3000/
No dependency info in bundle. Filesystem monitoring disabled.
Errors prevented startup:
Exception while bundling application:
Error: ENOTEMPTY, directory not empty 'c:\Users\Abigail\My Documents\GitHub\canvas tracker\.meteor\local\build\server'
    at Object.fs.rmdirSync (fs.js:456:18)
    at Object.module.exports.rm_recursive (c:\Program Files (x86)\Meteor\app\lib\files.js:256:10)
    at c:\Program Files (x86)\Meteor\app\lib\files.js:254:15
    at Array.forEach (native)
    at Function._.each._.forEach (c:\Program Files (x86)\Meteor\lib\node_modules\underscore\underscore.js:79:11)
    at Object.module.exports.rm_recursive (c:\Program Files (x86)\Meteor\app\lib\files.js:252:9)
    at _.extend.write_to_directory (c:\Program Files (x86)\Meteor\app\lib\bundler.js:493:11)
    at Object.exports.bundle (c:\Program Files (x86)\Meteor\app\lib\bundler.js:685:12)
    at exports.run.restart_server (c:\Program Files (x86)\Meteor\app\meteor\run.js:615:26)
    at c:\Program Files (x86)\Meteor\app\meteor\run.js:726:9

Please fix the problem and restart.
Run Code Online (Sandbox Code Playgroud)

但它不会进行即时代码更改并重新捆绑.:(当我尝试启动应用程序时,我也有时会收到EPERM错误.

Running on: http://localhost:3000/
No dependency info in bundle. Filesystem monitoring disabled.
Errors prevented startup:
Exception while bundling application:
Error: EPERM, operation not permitted 'c:\Users\Abigail\My Documents\GitHub\canvas-tracker\.meteor\local\.build.build'
    at Object.fs.renameSync (fs.js:439:18)
    at _.extend.write_to_directory (c:\Program Files (x86)\Meteor\app\lib\bundler.js:628:8)
    at Object.exports.bundle (c:\Program Files (x86)\Meteor\app\lib\bundler.js:685:12)
    at exports.run.restart_server (c:\Program Files (x86)\Meteor\app\meteor\run.js:615:26)
    at c:\Program Files (x86)\Meteor\app\meteor\run.js:726:9
    at Object.exports.launch_mongo (c:\Program Files (x86)\Meteor\app\lib\mongo_runner.js:146:5)
    at exports.run.launch (c:\Program Files (x86)\Meteor\app\meteor\run.js:712:39)
    at Server.exports.run (c:\Program Files (x86)\Meteor\app\meteor\run.js:770:5)
    at Server.g (events.js:193:14)
    at Server.EventEmitter.emit (events.js:90:17)

Please fix the problem and restart.
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?我在Windows 7 Ultimate,SP1,x64上使用Meteor 0.5.4.

编辑:我应该提到,只要代码中出现错误,就会发生这些错误.在我的OSX环境中,如果我有错误,代码仍然会编译,缩小和捆绑,并且页面可能无法渲染,我将在Chrome控制台中收到各种Javascript错误,然后我必须调试.在我的Win7环境中,我正在做同样的事情,但是不是编译我可以在Chrome中调试的半破坏应用程序,而是在捆绑过程中停止.在任何一种情况下,我的Javascript代码都有错误(我知道的很多).但是在OSX中,它仍然会捆绑,我可以继续调试.在Win7中,由于这些ENOTEMPTY和EPERM异常,我无法进入调试步骤......

编辑:是的,我已经尝试通过提供对每个人的完全访问权限来修改整个项目目录的权限.不幸的是,那并没有成功.

Abi*_*ilW 2

好的,在 Tom Wijsman 的帮助下,我们成功找到了这个问题。简短的回答是,它是 GitHub Bash shell。

长的答案是 ENOTEMPTY 和 EPERM 是由捆绑过程中未正确删除目录引起的。目录未正确删除是由使用 exec() 命令的代码引起的,该命令将删除命令传递给 shell。结果我使用的是 GitHub Bash shell,它区分大小写,不像标准的 Windows cmd.exe,它不区分大小写。区分大小写导致 shell 无法识别应删除的路径,因此不会删除它,从而导致捆绑过程中的中断。

100 倍感谢 Rahul 找到了之前关于此问题的错误报告!你是大海捞针的英雄!