无法分配给对象的只读属性“stopImmediatePropagation”

Posted

技术标签:

【中文标题】无法分配给对象的只读属性“stopImmediatePropagation”【英文标题】:Cannot assign to read only property 'stopImmediatePropagation' of object 【发布时间】:2018-11-21 15:10:39 【问题描述】:

将@angular/platform-b​​rowser(和其他@angular/xxx)升级到6.0.4版本后,我在第一次加载应用程序和每次重新加载第一页后都会出现这个错误(第一个F5:错误,第二个F5 :工作):

NodeInvocationException:无法分配给只读属性 对象“[object Object]”的“stopImmediatePropagation”类型错误: 无法分配给只读属性“stopImmediatePropagation” 对象'[对象对象]'在 DomEventsPlugin.module.exports../node_modules/@angular/platform-b​​rowser/bundles/platform-b​​rowser.umd.js.DomEventsPlugin.patchEvent (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:60044:50) 在新的 DomEventsPlugin (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:60031:15) 在 _callFactory 的 eval (ng:///AppModule/module.ngfactory.js:51:25) (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40373:28) 在 _createProviderInstance$1 (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40319:26) 在 resolveNgModuleDep (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40282:21) 在 _createClass (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40346:29) 在 _createProviderInstance$1 (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40316:26) 在 resolveNgModuleDep (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40282:21) 在 _createClass (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40352:32)

这是我的 vendor.js 中生成错误的代码:

DomEventsPlugin.prototype.patchEvent = function () 
    if (!Event || !Event.prototype) 
        return;
    
    if (Event.prototype[stopMethodSymbol]) 
        // already patched by zone.js
        return;
    
    var delegate = Event.prototype[stopMethodSymbol] =
        Event.prototype.stopImmediatePropagation;
    Event.prototype.stopImmediatePropagation = function ()  <-- ERROR
        if (this) 
            this[stopSymbol] = true;
        
        // should call native delegate in case
        // in some environment part of the application
        // will not use the patched Event
        delegate && delegate.apply(this, arguments);
    ;
;

这是我的环境

.NET Core 2.1 Angular 6.0.4 Angular/Cli 6.0.8 Webpack 4.12.0 aspnet-prerendering 3.0.1 aspnet-webpack 3.0.0

在开发模式下,我的 webpack 开发中间件处于活动状态,错误是否与供应商的创建时间有关?应用程序第一次加载时创建供应商,第二次从缓存中取出供应商:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Route matched with action = "Index", controller = "Home". Executing action CTAgenda.Controllers.HomeController.Index (CTAgenda)
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method CTAgenda.Controllers.HomeController.Index (CTAgenda) - Validation state: Valid
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action method CTAgenda.Controllers.HomeController.Index (CTAgenda), returned result Microsoft.AspNetCore.Mvc.ViewResult in 0.626ms.
info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1]
      Executing ViewResult, running view Index.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/dist/__webpack_hmr
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action CTAgenda.Controllers.HomeController.Index (CTAgenda) in 1660.2506ms
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: Cannot assign to read only property 'stopImmediatePropagation' of object '[object Object]'
TypeError: Cannot assign to read only property 'stopImmediatePropagation' of object '[object Object]'
    at DomEventsPlugin.module.exports../node_modules/@angular/platform-browser/bundles/platform-browser.umd.js.DomEventsPlugin.patchEvent (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:60044:50)
    at new DomEventsPlugin (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:60031:15)
    at eval (ng:///AppModule/module.ngfactory.js:51:25)
    at _callFactory (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40373:28)
    at _createProviderInstance$1 (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40319:26)
    at resolveNgModuleDep (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40282:21)
    at _createClass (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40346:29)
    at _createProviderInstance$1 (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40316:26)
    at resolveNgModuleDep (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40282:21)
    at _createClass (I:\Progetti\Platform\Software\CTAgenda\ClientApp\dist\vendor.js:40352:32)
   at Microsoft.AspNetCore.NodeServices.HostingModels.HttpNodeInstance.InvokeExportAsync[T](NodeInvocationInfo invocationInfo, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance.InvokeExportAsync[T](CancellationToken cancellationToken, String moduleName, String exportNameOrNull, Object[] args)
   at Microsoft.AspNetCore.NodeServices.NodeServicesImpl.InvokeExportWithPossibleRetryAsync[T](String moduleName, String exportedFunctionName, Object[] args, Boolean allowRetry, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.NodeServices.NodeServicesImpl.InvokeExportWithPossibleRetryAsync[T](String moduleName, String exportedFunctionName, Object[] args, Boolean allowRetry, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output)
   at Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.RunAsync(TagHelperExecutionContext executionContext)
   at AspNetCore.Views_Home_Index.ExecuteAsync() in I:\Progetti\Platform\Software\CTAgenda\Views\Home\Index.cshtml:line 2
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable`1 statusCode)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, String contentType, Nullable`1 statusCode)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
   at Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 2035.1489ms 500 text/html; charset=utf-8
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System.IO.IOException: Unable to read data from the transport connection: Operazione di I/O terminata a causa dell'uscita dal thread oppure della richiesta di un'applicazione. ---> System.Net.Sockets.SocketException: Operazione di I/O terminata a causa dell'uscita dal thread oppure della richiesta di un'applicazione
   --- End of inner exception stack trace ---
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
   at System.Net.Http.HttpConnection.FillAsync()
   at System.Net.Http.HttpConnection.ReadNextResponseHeaderLineAsync(Boolean foldedHeadersAllowed)
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.PerformProxyRequest(HttpContext context)
   at Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 600.0987ms 500 text/html; charset=utf-8
info: Microsoft.AspNetCore.NodeServices[0]
      i ´¢ówdm´¢ú: wait until bundle finished: /dist/__webpack_hmr
info: Microsoft.AspNetCore.NodeServices[0]
      Node will restart because file changed: I:\Progetti\Platform\Software\CTAgenda\wwwroot\dist\main-client.js
info: Microsoft.AspNetCore.NodeServices[0]
      webpack built 1c1bbe760c1dbb40f7fd in 72352ms
info: Microsoft.AspNetCore.NodeServices[0]
      i ´¢ówdm´¢ú: Hash: 1c1bbe760c1dbb40f7fd
      Version: webpack 4.12.0
      Time: 72352ms
      Built at: 2018-06-12 11:06:08
                   Asset      Size       Chunks             Chunk Names
          main-client.js  1.94 MiB  main-client  [emitted]  main-client
                    0.js  48.5 KiB            0  [emitted]
                    1.js  48.3 KiB            1  [emitted]
      main-client.js.map  34.4 KiB  main-client  [emitted]  main-client
                0.js.map  81 bytes            0  [emitted]
                1.js.map  81 bytes            1  [emitted]
      Entrypoint main-client = main-client.js main-client.js.map
info: Microsoft.AspNetCore.NodeServices[0]
      i ´¢ówdm´¢ú: Compiled successfully.  

感谢您的支持。

【问题讨论】:

您是否也将 rxjs 库更新为 6? 是的,我做到了:6.2.0 我也面临同样的错误,我唯一可以建议的是错误可能是由于 zone.js 【参考方案1】:

在对我的所有软件包进行全局更新后,一切都重新开始工作了。其他用户也一样,查看GitHub issue

我的 package.json:

"dependencies": 
"@angular/animations": "^6.0.7",
"@angular/common": "^6.0.7",
"@angular/compiler": "^6.0.7",
"@angular/core": "^6.0.7",
"@angular/forms": "^6.0.7",
"@angular/http": "^6.0.7",
"@angular/platform-browser": "^6.0.7",
"@angular/platform-browser-dynamic": "^6.0.7",
"@angular/platform-server": "^6.0.7",
"@angular/router": "^6.0.7",
"@ng-bootstrap/ng-bootstrap": "^2.2.0",
"aspnet-prerendering": "^3.0.1",
"aspnet-webpack": "^3.0.0",
"bootstrap": "^4.1.1",
"css": "2.2.3",
"es6-shim": "0.35.3",
"event-source-polyfill": "0.0.12",
"jquery": "3.3.1",
"jwt-decode": "^2.2.0",
"material-design-icons": "^3.0.1",
"moment": "^2.22.2",
"ngx-toastr": "^8.8.0",
"nodemailer": "^4.6.7",
"popper.js": "^1.14.3",
"preboot": "6.0.0-beta.4",
"reflect-metadata": "0.1.12",
"rxjs": "^6.2.1",
"stacktrace-js": "^2.0.0",
"zone.js": "^0.8.26"
,
"devDependencies": 
"@angular/cli": "^6.0.8",
"@angular/compiler-cli": "^6.0.7",
"@angular/language-service": "^6.0.7",
"@ngtools/webpack": "^6.0.8",
"@types/chai": "4.1.4",
"@types/jasmine": "2.8.8",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^10.5.1",
"@types/stacktrace-js": "0.0.32",
"@types/webpack-env": "^1.13.6",
"angular-router-loader": "^0.8.5",
"angular2-template-loader": "^0.6.2",
"chai": "4.1.2",
"codelyzer": "^4.4.2",
"css-loader": "^0.28.11",
"file-loader": "^1.1.11",
"html-loader": "^0.5.5",
"jasmine": "^3.1.0",
"jasmine-core": "3.1.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "2.0.4",
"karma-chai": "0.1.0",
"karma-chrome-launcher": "2.2.0",
"karma-cli": "1.0.1",
"karma-coverage-istanbul-reporter": "^2.0.1",
"karma-jasmine": "1.1.2",
"karma-jasmine-html-reporter": "^1.2.0",
"karma-webpack": "^3.0.0",
"mini-css-extract-plugin": "^0.4.1",
"ng-router-loader": "^2.1.0",
"protractor": "~5.3.2",
"style-loader": "^0.21.0",
"to-string-loader": "^1.1.5",
"ts-loader": "^4.4.2",
"ts-node": "~7.0.0",
"tslint": "^5.10.0",
"typescript": "^2.7.2",
"uglifyjs-webpack-plugin": "^1.2.7",
"url-loader": "^1.0.1",
"webpack": "^4.14.0",
"webpack-bundle-analyzer": "^2.13.1",
"webpack-cli": "^3.0.8",
"webpack-dev-middleware": "^3.1.3",
"webpack-hot-middleware": "^2.22.2",
"webpack-merge": "^4.1.3"

【讨论】:

【参考方案2】:

尝试改变

DomEventsPlugin.prototype.patchEvent = function () 
    if (!Event || !Event.prototype) 
        return;
    
    if (Event.prototype[stopMethodSymbol]) 
        // already patched by zone.js
        return;
    
    var delegate = Event.prototype[stopMethodSymbol] =
        Event.prototype.stopImmediatePropagation;
    Event.prototype[stopMethodSymbol] = function ()   <-- CHANGE
        if (this) 
            this[stopSymbol] = true;
        
        // should call native delegate in case
        // in some environment part of the application
        // will not use the patched Event
        delegate && delegate.apply(this, arguments);
    ;
;

【讨论】:

我找不到当前代码和您的代码之间的任何区别,请问您是否已更改任何内容以使其正常工作 @Black Mamba,Event.prototype.stopImmediatePropagation 在 Event.prototype[stopMethodSymbol] 上发生变化。它帮助了我 @BlackMamba,我的解决方案有效,但是我想知道是否有更强大的方法,因为这意味着手动修改 vendor.js 文件 另一个解决方案是在 GitHub 问题中,该问题是在本地下载 angular 通用 repo,然后将源转移到那里。这也对我有用。 @ghego1

以上是关于无法分配给对象的只读属性“stopImmediatePropagation”的主要内容,如果未能解决你的问题,请参考以下文章

无法分配给对象的只读属性“stopImmediatePropagation”

无法分配给对象“#<ValidationComponent>”的只读属性“dataChange”

TypeError:无法分配给只读属性 - Karma

无法使用 .map() 分配给只读属性。使用 NextJs 反冲

排序对象数组时出错无法分配给对象'[object Array]'的只读属性'2'

NativeScript Vue nativescript-sqlite 无法分配给“#<Object>”的只读属性“exports”对象