javascript - Sharepoint 框架中的反射元数据突然崩溃

标签 javascript typescript sharepoint webpack decorator

我编写了一个 NPM 模块,供在使用 reflect-metadata 的 SharePoint 框架 Web 部件中使用

import "reflect-metadata";

export function someDecorator(name: string): ClassDecorator {
    return target => {
        Reflect.defineMetadata("MyDecorator", name, target);
    }
}

这几个月使用得很好,直到昨天我的 spfx 应用程序突然开始失败:

NonErrorEmittedError: (Emitted value instead of an instance of Error) Cannot find source file 'Reflect.ts': Error: Can't resolve './Reflect.ts' in '/mnt/tmp/my-webpart/node_modules/reflect-metadata'
    at emitWarning (/mnt/tmp/my-webpart/node_modules/webpack/lib/NormalModule.js:117:16)
    at /mnt/tmp/my-webpart/node_modules/source-map-loader/index.js:64:7
    at onError (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/Resolver.js:65:10)
    at loggingCallbackWrapper (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/createInnerCallback.js:31:19)
    at runAfter (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/Resolver.js:158:4)
    at innerCallback (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/Resolver.js:146:3)
    at loggingCallbackWrapper (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/createInnerCallback.js:31:19)
    at next (/mnt/tmp/my-webpart/node_modules/tapable/lib/Tapable.js:252:11)
    at /mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js:40:4
    at loggingCallbackWrapper (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/createInnerCallback.js:31:19)
    at runAfter (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/Resolver.js:158:4)
    at innerCallback (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/Resolver.js:146:3)
    at loggingCallbackWrapper (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/createInnerCallback.js:31:19)
    at next (/mnt/tmp/my-webpart/node_modules/tapable/lib/Tapable.js:252:11)
    at innerCallback (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/Resolver.js:144:11)
    at loggingCallbackWrapper (/mnt/tmp/my-webpart/node_modules/enhanced-resolve/lib/createInnerCallback.js:31:19)

这是通过构建与两天前运行良好的完全相同的代码而得到的。

那么什么可能导致这种情况呢?为什么它突然寻找一个不存在的 Reflect.ts 文件?而且,最重要的是,我怎样才能让它再次工作?

最佳答案

如果您手动添加Reflect.ts/node_modules/reflect-metadata 您的构建应该会成功。

参见issue#95pr#89

我选择将 Reflect.ts 复制到源代码中并导入此本地文件,而不是“reflect-metadata”

此解决方案的注意事项:

  1. 发生了 tslint 警告,因此我将 /* tslint:disable */ 添加到文件顶部。
  2. ts 错误位于文件“类型‘符号’不能用作索引类型。”由于 spfx 使用的 TS 版本与 Reflect-metadata 使用的版本不同。我将 map[key] 替换为 map[key as string | number] 来消除错误。

或者,您可以 fork Reflect-metadata 并发布包含 Reflect.ts 的更新的 npm 模块。

关于javascript - Sharepoint 框架中的反射元数据突然崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753315/

相关文章:

SharePoint-获取当前用户列表

javascript - XMLHttpRequest 文件上传在 IE11 中不起作用

javascript - 当 console.log 是 HTML 文件时如何获取它的输出

TypeScript: "catch"并在条件中显式处理未解析的泛型?

C# 将 Microsoft.Sharepoint.Client.FieldUserValue 转换为 Microsoft.Sharepoint.Client.User

angularjs - SharePoint 列表上的 CRUD 与 Angular $resource

javascript - 从 ffmpeg 到 html 的实时视频源,延迟最小

javascript - Angular ng-click 不适用于数据切换 ="toggle"

angular - 如何在 ng2-date-picker 中设置选项?

javascript - "Property json does not exist on type {}" typescript