很抱歉尴尬的帖子标题,但这是一个非常奇怪的情况。在我的项目中,我有一个像这样的文件夹结构:
/filters
index.js
[...]
/controllers
index.js
[...]
app.js
app.js
基本上是我的应用程序的入口点,我认为如果我可以通过require()
目录自动加载这些目录的内容并且index.js
为{每个目录都负责加载需要加载的任何内容。
但是我遇到了一个我不明白的问题。因为我故意是钝的(这是一次学习/实验练习),所以我决定尽可能地将它保持为DRY,所以我尝试了这么大的代码来处理模块加载:
'use strict';
var customModules = [
'controllers',
'filters'
];
//require('./controllers');
//require('./filters');
for (var i in customModules) {
if (customModules.hasOwnProperty(i)) {
require('./' + customModules[i]);
}
}
var nativeModules = [
'ngSanitize'
];
angular.module('app', customModules.concat(nativeModules));
我计划将其提取到自己的模块中,但它会进行演示。由于某种原因,此代码抛出此异常:
Uncaught Error: Cannot find module './controllers'
但是当我使用静态字符串
加载它时require('./controllers');
没有问题,一切正常,我的示例应用程序按预期运行。
答案 0 :(得分:1)
结帐Browserify Handbook how browserify works(强调我的):
Browserify从您提供的入口点文件开始,并使用源代码的抽象语法树的静态分析搜索它找到的任何require()调用。
对于每次使用一个字符串的require()调用,browserify会将这些模块字符串解析为文件路径,然后递归搜索这些文件路径以寻找require()调用,直到访问整个依赖关系图。
底线:必须静态声明依赖项;涉及动态创建的require()
调用的代码无法正常工作(原则上这是一个好主意)。
您可以使用服务器端或构建时技术获得类似的结果。