我知道,可以像这样从 javascript 中“导入”脚本文件:
var imported = document.createElement('script');
imported.src = '/path/to/imported/script.js';
document.head.appendChild(imported);
为此,必须事先知道文件名(此处:script.js
)及其位置。
我有许多可选模块可以存在或不存在于我的主项目中。每个模块都是它自己的 javascript 文件。我想检测 scripts/
目录中存在哪一个并以上述方式运行它们,即我事先不知道文件名。我知道 javascript 是客户端,无法访问服务器端目录,但也许有一个使用请求对象或类似内容的解决方法。我没有可用的服务器端脚本语言。这可能吗?
为了说明,我有一个文件 /scripts/main.js
,它始终存在并包含在 HTML 文件 index.html
中。然后在 /scripts/
中还有许多其他 *.js
文件,即模块。我希望它们自动包含在 main.js
中。说明:
<!-- In index.html -->
<html><head>
<title>Include Scripts</title>
<script type="text/javascript" src="scripts/main.js">
</head><body>
<!-- ...more stuff... -->
</body></html>
虽然 main.js
可能看起来像这样:
// In main.js
scripts = findScripts( 'scripts/*.js' ); // How do I do this?
for( i=0; i<scripts.length; i++ ) {
if( scripts[i].match(/main.js$/ ) continue;
var imported = document.createElement('script');
imported.src = scripts[i];
document.head.appendChild(imported);
}
然后脚本目录中的模块应该自己运行。
最佳答案
对此不会有纯粹的前端解决方案,因为 HTML 页面无法查看服务器并查看那里有哪些文件。您有几个选择:
- 如果您知道可能存在的所有 可能 JS 文件,您可以尝试将它们全部包含在内,有些会成功,有些会失败 (404)。我不会真的建议这是一个可行的选择,但从技术上讲……它可以工作。
- 创建一个小型网络服务/API 端点,用于查看该文件夹中的 JS 文件列表并将它们返回到您的页面,现在您有一个可以加载的列表。
- (我会研究什么)使用某种构建系统,或者至少是串联。如果你的系统只需要获取文件夹中的所有 JS 文件并将它们全部组合到
modules.js
中,那么你只需要为每个页面加载modules.js
.
关于带有 URL 通配符的 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301129/