您如何使用垫片将全局第三方项目映射到作用域对象

How do you use shims to map global thirdparty project to scoped object

文档中有一个在项目中包含 lodash 的示例,通常会将变量“_”添加到全局范围。使用 AMD 垫片,您可以映射预期的(全局)并在导入中显示它。

例如为此:

specVersion: "1.0"
type: application
metadata:
  name: my.application
--- # Everything below this line could also be put into the ui5.yaml of a standalone extension module
specVersion: "1.0"
kind: extension
type: project-shim
metadata:
  name: my.application.thirdparty
shims:
  configurations:
    lodash: # name as defined in package.json
      specVersion: "1.0"
      type: module # Use module type
      metadata:
        name: lodash
      resources:
        configuration:
          paths:
            /resources/my/application/thirdparty/: "" # map root directory of lodash module

我希望能够(通过 shim 配置)将 window._ 映射到我在 "import" 中定义的内容(在下面的示例中,"myLodash" )

sap.ui.define([ "/resources/my/application/thirdparty/lodash"],

函数(myLodash){ "use strict";

var MyController = Controller.extend("com.my.application", {
    myLodash.chunk(['a', 'b', 'c', 'd'], 2);
});

在 RequireJS 中,这将在 Shim > exports

中定义

您可以使用 sap.ui.loader API 来影响它。在你导入这个模块之前的某个地方,比如 Component.js do:

sap.ui.loader.config({
   shim: {
     "path/to/module/myLodash": {
        exports: "_"
      }
   }
});

然后你可以这样导入它:

sap.ui.define(["path/to/module/myLodash"], function (myLodash) {
   "use strict";
    myLodash.chunk(...)
    ...
});

确保 path/to/module/myLodash 指向您的 lodash 模块所在的位置。

更新

this blog中解释了如何直接从node_modules中使用模块,我认为这是更好的选择。