RequireJS 绝对路径产生脚本错误
RequireJS absolute path produces Script Error
我有一个简单的文件,我正在使用 define
:
加载 requireJS 的依赖项
define([
"dojo/_base/declare",
"dojo/aspect",
"local/path/to/myFile"
], function(
declare,
aspect,
myFile
) { ...
这正常工作,文件映射到 requireJS 配置中。
但是,如果我尝试使用绝对路径访问其中一个文件(完全相同的文件):
define([
"dojo/_base/declare",
"dojo/aspect",
"https://blah.com/absolute/path/to/myFile.js"
], function(
declare,
aspect,
myFile
) { ...
我收到以下错误:
"message": "Error: Script error for \"https://blah.com/absolute/path/to/myFile.js\", needed by: /home/test_vds_jasmine/test/modules/myFile-spec4.js\nhttp://requirejs.org/docs/errors.html#scripterror\nat /home/node_modules/requirejs/require.js:168:17\n\nmakeError@/home/node_modules/requirejs/require.js:168:17\nnewContext/context.onScriptError@/home/node_modules/requirejs/require.js:1738:36\n"
我已经尝试了所有绝对路径方式,包括有和没有 https
,有和没有 .js
扩展名,但我画的是一片空白,错误消息根本没有帮助。
我是不是调用错了绝对路径?有没有人有这样的经验?
我必须使用绝对路径调用一些文件或者我只在本地调用所有文件是有正当理由的。
试试这个,把你的 URL 放在你的 requirejs 配置中,像这样:
requirejs.config({
paths: { 'myFileRemote': 'https://blah.com/absolute/path/to/myFile.js' }
});
现在用上面的映射更新你的文件:
define([
"dojo/_base/declare",
"dojo/aspect",
"myFileRemote"
], function(
declare,
aspect,
myFile
) { ...
Suggested Solution
你的 myFile.js
应该有一个像那样使用的定义块。使用定义结构升级您的 myFile.js
。
myFile.js:
define(["./cart", "./cart2"], function(cart, cart2) {
return {
color: cart.color,
size: "large",
addToCart: function() {
}
}
});
Alternative Solution
如果您无法将 myFile.js
修改为该结构,只需按照您添加 jQuery
的方式将其添加到 requirejs
配置的 path
中。您可以在 myFile.js
或 app.js
的顶部添加配置(您从中调用 myFile.js
的文件)。如果您将配置添加到 app.js
,您可以从任何地方访问它。
myFile.js/app.js:
require.config({
paths: {
"myFile": "https://blah.com/absolute/path/to/myFile"
}
});
那你就可以这样使用了:
myFile.js:
define([
"dojo/_base/declare",
"dojo/aspect",
"myFile"
], function(
declare,
aspect,
myFile
) { ...
我有一个简单的文件,我正在使用 define
:
define([
"dojo/_base/declare",
"dojo/aspect",
"local/path/to/myFile"
], function(
declare,
aspect,
myFile
) { ...
这正常工作,文件映射到 requireJS 配置中。
但是,如果我尝试使用绝对路径访问其中一个文件(完全相同的文件):
define([
"dojo/_base/declare",
"dojo/aspect",
"https://blah.com/absolute/path/to/myFile.js"
], function(
declare,
aspect,
myFile
) { ...
我收到以下错误:
"message": "Error: Script error for \"https://blah.com/absolute/path/to/myFile.js\", needed by: /home/test_vds_jasmine/test/modules/myFile-spec4.js\nhttp://requirejs.org/docs/errors.html#scripterror\nat /home/node_modules/requirejs/require.js:168:17\n\nmakeError@/home/node_modules/requirejs/require.js:168:17\nnewContext/context.onScriptError@/home/node_modules/requirejs/require.js:1738:36\n"
我已经尝试了所有绝对路径方式,包括有和没有 https
,有和没有 .js
扩展名,但我画的是一片空白,错误消息根本没有帮助。
我是不是调用错了绝对路径?有没有人有这样的经验?
我必须使用绝对路径调用一些文件或者我只在本地调用所有文件是有正当理由的。
试试这个,把你的 URL 放在你的 requirejs 配置中,像这样:
requirejs.config({
paths: { 'myFileRemote': 'https://blah.com/absolute/path/to/myFile.js' }
});
现在用上面的映射更新你的文件:
define([
"dojo/_base/declare",
"dojo/aspect",
"myFileRemote"
], function(
declare,
aspect,
myFile
) { ...
Suggested Solution
你的 myFile.js
应该有一个像那样使用的定义块。使用定义结构升级您的 myFile.js
。
myFile.js:
define(["./cart", "./cart2"], function(cart, cart2) {
return {
color: cart.color,
size: "large",
addToCart: function() {
}
}
});
Alternative Solution
如果您无法将 myFile.js
修改为该结构,只需按照您添加 jQuery
的方式将其添加到 requirejs
配置的 path
中。您可以在 myFile.js
或 app.js
的顶部添加配置(您从中调用 myFile.js
的文件)。如果您将配置添加到 app.js
,您可以从任何地方访问它。
myFile.js/app.js:
require.config({
paths: {
"myFile": "https://blah.com/absolute/path/to/myFile"
}
});
那你就可以这样使用了:
myFile.js:
define([
"dojo/_base/declare",
"dojo/aspect",
"myFile"
], function(
declare,
aspect,
myFile
) { ...