您如何使用垫片将全局第三方项目映射到作用域对象
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中使用模块,我认为这是更好的选择。
文档中有一个在项目中包含 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中使用模块,我认为这是更好的选择。