如何获取当前正在执行的 JavaScript 代码的文件路径

87
我想做类似于C语言的 #include "filename.c" 或者 PHP 中的 include(dirname(__FILE__)."filename.php") 的功能,但是想在 JavaScript 中实现。如果我能获取到 JavaScript 文件加载时的 URL(例如 script 标签中的 src 属性所提供的 URL),那么我就可以实现这个功能。是否有办法让 JavaScript 获取它呢?
另外,有没有一种好的方法可以动态从同一域加载 JavaScript(无需明确知道该域)?例如,假设我们有两个相同的服务器(QA 和生产环境),但它们显然具有不同的 URL 域。是否有一种方式可以像这样使用 include("myLib.js");,其中 myLib.js 将从加载它的文件所在的域中加载?
如果我的表达有点令人困惑,非常抱歉。
12个回答

1
我已经写了一些不太规范的代码,可以获取当前 .js 文件的运行情况(例如,如果你使用 "node ." 运行脚本,你可以使用此代码获取正在运行的脚本所在的目录)。
这将以 "file://path/to/directoryWhere/fileExists" 的形式获取它。
var thisFilesDirectoryPath = stackinfo()[0].traceline.substring("readFile (".length, stackinfo()[0].traceline.length - ")".length-"readFile (".length);

这需要一个npm包(我敢肯定它在其他平台上也有): <代码>npm i stackinfo <代码>import stackinfo from 'stackinfo'; 或者 <代码>var {stackinfo} = require("stackinfo");

使用Node,您只需使用__dirname。我的问题实际上是关于浏览器JS的。 - B T
@BT并不总是这样 - 我之所以创建这个是因为在我的项目中某些原因下__dirname不存在。 - GavinGoGaming
你可能一直在使用es6模块,但由于某些原因它被取消了。这里是重新引入它的方法:const __filename = url.fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); - B T

0
function getCurrnetScriptName() {
    const url = new URL(document.currentScript.src);
    const {length:len, [len-1]:last} = url.pathname.split('/');
    return last.slice(0,-3);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接