我正在尝试使用 SurveyJS 运行简单的调查,但 requireJS 没有加载它。加载时没有错误,但在define函数体内未定义。
我尝试过使用shim的exports属性,但结果是一样的。
我可能做错了什么?
index.js
requirejs.config({
paths: {
app: "./",
jquery: 'https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min',
Survey: "https://unpkg.com/[email protected]/survey.jquery.min",
},
shim: {
Survey: {
deps: ['jquery'],
}
}
});
requirejs(["main"]);
main.js
define(["Survey"], function (Survey) {
console.log(Survey); // undefined
});
index.html
<head>
<script data-main="index" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.min.js"></script>
<link href="index.css" rel="stylesheet" />
<link href="https://unpkg.com/[email protected]/modern.css" type="text/css" rel="stylesheet"/>
</head>
事实证明,每个模块在库中都可以有自己的名称。对于 SurveyJS 来说,它是
survey-jquery
。并且它不需要使用 requirejs 的 shim
部分。
必须查看库的定义它的开始部分。另外,它需要将 jQuery 定义为
jquery
。
function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("jquery"));
else if(typeof define === 'function' && define.amd)
define("survey-jquery", ["jquery"], factory);
else if(typeof exports === 'object')
exports["survey-jquery"] = factory(require("jquery"));
else
root["Survey"] = factory(root["jQuery"]);
}
更改
index.js
如下
require.config({
paths: {
app: "./",
jquery: 'https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min',
'survey-jquery': "https://unpkg.com/[email protected]/survey.jquery.min",
},
});
由于导入的模块名称变了,所以也变了
main.js
define(["survey-jquery"], function (Survey) {
console.log(Survey); // Module {...}
});
我也面临着同样的问题。请帮忙。