带有通配符的Javascript?

时间:2016-09-02 21:47:22

标签: javascript import wildcard

我知道,人们可以"导入" 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中。然后在*.js模块中有许多其他/scripts/个文件。我希望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);
}

然后脚本目录中的模块应该自己运行。

2 个答案:

答案 0 :(得分:3)

由于HTML页面无法查看服务器并查看哪些文件存在,因此不会成为纯粹的前端解决方案。您有几个选择:

  1. 如果您知道可能存在的所有可能的 JS文件,您可以尝试将它们全部包含在内,有些会成功,有些会失败(404)。我不会真的建议这是一个可行的选择,但从技术上讲......它可以起作用。
  2. 创建一个小型Web服务/ API端点,查看该文件夹中的JS文件列表并将其返回到您的页面,现在您可以加载一个列表。
  3. (我会查看)使用某种构建系统,或至少是连接。如果您的系统只接受文件夹中的所有JS文件并将它们全部合并到modules.js,那么您只需为每个页面加载modules.js

答案 1 :(得分:1)

不,你不能。 javascript在浏览器中运行,无权访问列出服务器上的文件。你可以搜索使用PHP或任何后端语言的方式

此处可以找到类似的讨论:Is there a way to return a list of all the image file names from a folder using only Javascript?