StudioTime
StudioTime

Reputation: 23989

RequireJS absolute path produces Script Error

I have a simple file which I'm loading dependencies with requireJS using define:

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "local/path/to/myFile"
], function(
    declare,
    aspect,
    myFile
) { ...

This works as it should, the files are mapped in the requireJS config.

However, if I try to access one of the files using an absolute path (the exact same file):

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "https://blah.com/absolute/path/to/myFile.js"
], function(
    declare,
    aspect,
    myFile
) { ... 

I get the following error:

"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"

I've tried all manner of absolute path including with and without https, with and without the .js extension but am drawing a blank, the error message is not really helpful at all.

Am I calling the absolute path in the wrong way? Has anyone had experience doing it this way?

There's a valid reason why I have to call some files using absolute paths or I would just call all locally.

Upvotes: 8

Views: 3137

Answers (2)

Munim Munna
Munim Munna

Reputation: 17546

Suggested Solution

Your myFile.js should have a define block to be used like that. Upgrade your myFile.js with define structure.

myFile.js:

define(["./cart", "./cart2"], function(cart, cart2) {
    return {
        color: cart.color,
        size: "large",
        addToCart: function() {
        }
    }
});

Alternative Solution

If you cannot modify myFile.js to that structure just add it to the path of requirejs config the way you add jQuery. You can add the config at the top of myFile.js or app.js (the file you are calling myFile.js from). If you add config to app.js, you can access it from everywhere.

myFile.js/app.js:

require.config({
    paths: {
        "myFile": "https://blah.com/absolute/path/to/myFile"
    }
});

Then you can use it as follows:

myFile.js:

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "myFile"
], function(
    declare,
    aspect,
    myFile
) { ...

Upvotes: 1

Navjot Ahuja
Navjot Ahuja

Reputation: 1171

Try this, put your URL in your requirejs config like this:

requirejs.config({
        paths: { 'myFileRemote': 'https://blah.com/absolute/path/to/myFile.js' }
    });

Now update your file with above mapping:

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "myFileRemote"
], function(
    declare,
    aspect,
    myFile
) { ... 

Upvotes: 6

Related Questions