簡體   English   中英

為什么AMD的相對導入無法在requirejs中工作?

[英]Why don't relative imports with AMD work in requirejs?

因此,如果您有一個文件夾:

- demo/js/foo/foo.js
- demo/js/foo/bar/a.js
- demo/js/foo/bar/b.js

然后將AMD模塊定義為:

foo.js: define(['./bar/a.js', './bar/b.js'], function(a, b) { console.log(a, b); });
a.js: define([], function() { return {a:'a'}; });
b.js: define([], function() { return {b:'b'}; });

然后,如果您像這樣導入模塊:

require(['./foo/foo'], function() { ... }

得到:

"NetworkError: 404 Not Found - http://localhost:3005/demo/foo/bar/a.js"
"NetworkError: 404 Not Found - http://localhost:3005/demo/foo/bar/b.js"
Error: Script error for: foo/bar/a.js http://requirejs.org/docs/errors.html#scripterror
Error: Script error for: foo/bar/b.js http://requirejs.org/docs/errors.html#scripterror

為什么不起作用?

我在requirejs論壇上讀了一些晦澀的帖子,說這是“按預期工作”,因為“導入是名稱,它們不是相對路徑”。 ...並且您應該使用“地圖”功能解決此問題。

...

對! 好吧,我不會講這種行為有多明顯,或者像https://groups.google.com/forum/#!searchin/requirejs/relative/requirejs/Zmh7EV5fR2M/4OM-ss5g3DEJ這樣的線程是多么無用的; 讓我們直接說清楚。

如何應該使這項工作?

顯然,如果您使用Bower導入任意模塊,並且該模塊位於js / lib / obscure.js / dist / obscure.js中,則需要設置配置:

require.config({
    paths: {
        obscure: 'lib/obscure.js/dist/obscure'
    }
});

...但這似乎意味着所有“ amd可導入”模塊最終都是其中一個包含所有模塊的簡單文件的大量合並。

使用baseUrl並不是解決方案,因為如上所述,您希望將javascript的多個孤立的“島”作為模塊安裝,其中1)需要互相引用,但2)還需要能夠引用自己的內部,相對模塊。

似乎異常怪異。

再次,如何你應該做的不平凡的情況下,這個工作?

編輯:

當然,您說的是,您做錯了,只是沒有告訴我們您正在做的所有事情。 好吧,自己看看。 github上的錯誤副本現在在這里: https : //github.com/shadowmint/requirejs-example

相對進口確實有效。

代碼的問題是您列出了模塊名稱以及.js擴展名。 您永遠不要以.js擴展名指定模塊名稱。 如果您確實放置了擴展名,則實際上是在告訴RequireJS“我已經知道我想要的模塊在我給您的路徑的末尾;不要弄亂這個路徑”,因此您的RequireJS配置不會影響放置在依賴項中的路徑的解析方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM