【发布时间】:2016-04-06 23:18:57
【问题描述】:
我使用Angular2 Cli 作为我的 Angular 2 应用程序的运行时环境。它的架构、一流的开发工具和整体深思熟虑(因为没有更好的词)给我留下了深刻的印象。
但是,大约每五次保存(构建)我的服务器就会生成错误消息:
Error: Trying to add a new entry to an already existing one:
然后我必须终止该进程并重新启动它以解决问题。
这是全文:
file changed app/vtClass.ts
The Broccoli Plugin: [BroccoliTypeScriptCompiler] failed with:
Error: Trying to add a new entry to an already existing one: /home/vturner/vtstuff/angular/projects/ang2-cli2/tmp/broccoli_type_script_compiler-input_base_path-sdRX1KMo.tmp/0/src/app/ang2-cli2.spec.ts
at BroccoliTypeScriptCompiler._addNewFileEntry (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:212:13)
at /home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:159:38
at Array.forEach (native)
at BroccoliTypeScriptCompiler._doFullBuild (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:159:16)
at BroccoliTypeScriptCompiler._doIncrementalBuild (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:116:12)
at BroccoliTypeScriptCompiler.build (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:45:12)
at /home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/broccoli-caching-writer/index.js:152:21
at lib$rsvp$$internal$$tryCatch (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/rsvp/dist/rsvp.js:1036:16)
at lib$rsvp$$internal$$invokeCallback (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/rsvp/dist/rsvp.js:1048:17)
at lib$rsvp$$internal$$publish (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/rsvp/dist/rsvp.js:1019:11)
The broccoli plugin was instantiated at:
at BroccoliTypeScriptCompiler.Plugin (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/broccoli-plugin/index.js:10:31)
at BroccoliTypeScriptCompiler.CachingWriter [as constructor] (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/broccoli-caching-writer/index.js:21:10)
at BroccoliTypeScriptCompiler (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:25:35)
at Angular2App.toTree (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/lib/broccoli/angular2-app.js:67:16)
at module.exports (/home/vturner/vtstuff/angular/projects/ang2-cli2/angular-cli-build.js:11:14)
at Class.module.exports.Task.extend.setupBroccoliBuilder (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/node_modules/angular-cli/lib/models/builder.js:55:19)
at Class.module.exports.Task.extend.init (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/node_modules/angular-cli/lib/models/builder.js:89:10)
at new Class (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/core-object/core-object.js:18:12)
at Class.module.exports.Task.extend.run (/home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/node_modules/angular-cli/lib/tasks/serve.js:15:19)
at /home/vturner/vtstuff/angular/projects/ang2-cli2/node_modules/angular-cli/node_modules/angular-cli/lib/commands/serve.js:70:22
我似乎只在出现编码错误时才遇到问题,但这并不是说编码错误与此消息之间存在 1-1 对应关系——我生成的大多数编码错误不生成这条消息。
一旦我收到错误,服务器似乎会进入一个阻塞状态,无论我做什么,包括修复编码问题,都会让问题消失。只有在我循环服务器时它才会消失。
必须不断检查这种情况并循环服务器来解决这个问题,这变得非常乏味,这需要大约 6 秒。
我可以发布我的代码,但我没有看到代码与收到此消息之间的任何押韵或原因,所以我认为这不会有帮助,即我认为这是一个环境问题而不是编码问题。我已尝试删除错误消息中列出的 tmp 目录,但没有成功。
我这样启动我的服务器:
vturner@vturner-virtual-machine ~/vtstuff/angular/projects/ang2-cli2 $
sudo ng serve
Could not start watchman; falling back to NodeWatcher for file system events.
Visit http://www.ember-cli.com/user-guide/#watchman for more info.
Livereload server on http://localhost:49152
Serving on http://localhost:4200/
Build successful - 8049ms.
Slowest Trees | Total
----------------------------------------------+---------------------
BroccoliTypeScriptCompiler | 7643ms
Slowest Trees (cumulative) | Total (avg)
----------------------------------------------+---------------------
BroccoliTypeScriptCompiler (1) | 7643ms
file changed app/vtClass.ts
Build successful - 1072ms.
注意:我一直以 sudo 运行服务器,因为我要么遇到权限问题,要么在某处读到它以 sudo 运行得更快(最后一个可能只在 Windows 上是真的),但我不认为以 sudo 运行与我的问题有关。
这是我的 package.json:
{
"name": "ang2-cli2",
"version": "0.0.0",
"license": "MIT",
"angular-cli": {},
"scripts": {
"start": "ng server",
"postinstall": "typings install --ambient",
"lint": "tslint src/**/*.ts",
"format": "clang-format -i -style=file --glob=src/**/*.ts",
"pree2e": "webdriver-manager update",
"e2e": "protractor"
},
"private": true,
"dependencies": {
"angular2": "2.0.0-beta.11",
"es6-shim": "^0.35.0",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.2",
"systemjs": "0.19.20",
"three": "^0.75.0",
"zone.js": "^0.6.4"
},
"devDependencies": {
"angular-cli": "0.0.*",
"angular-cli-github-pages": "^0.2.0",
"clang-format": "^1.0.35",
"codelyzer": "0.0.12",
"ember-cli-inject-live-reload": "^1.4.0",
"jasmine-core": "^2.3.4",
"jasmine-spec-reporter": "^2.4.0",
"karma": "^0.13.15",
"karma-chrome-launcher": "^0.2.1",
"karma-jasmine": "^0.3.6",
"protractor": "^3.0.0",
"ts-node": "^0.5.5",
"tslint": "^3.6.0",
"typescript": "^1.8.7",
"typings": "^0.6.6"
}
}
谁能告诉我我做错了什么,或者我可以做些什么来防止这种情况发生?
非常感谢。
【问题讨论】:
-
我注释掉了 node_modules/angular-cli/lib/broccoli/broccili-typescript.js 中的错误行:
_addNewFileEntry(entry) { const p = path.join(this.inputPaths[0], entry.relativePath); if (this._fileRegistry[p]) { //vt add console.log("vt.broccoli-typescript.js: intercepting dupicate entry error"); //vt end //vtthrow new Error('Trying to add a new entry to an already existing one: ' + p); }但现在我得到了Error: EEXIST: file already exists我认为这可能是一个库问题。见github.com/ember-cli/ember-cli/issues/3413 -
我在使用 Angular 2 CLI 时遇到了完全相同的问题。每次都必须杀死并重新启动服务器非常乏味。您是否将此作为问题提交到 CLI 的 Github 上?
-
我在 angular-cli repo 上找到了类似的 open issue。我添加了“我也是”评论以及我的详细信息。开票的人指出,这种情况只有在您修复以前标记的错误时才会发生。我能够验证这是为我生成条件的机制。
-
我在ticket 中发布了一个解决方法(小的源代码更改)。只是临时修复,直到开发人员能够提出实际修复。
标签: angularjs angular broccolijs angular-cli