Webpack 的 bulk-require 实现问题的替代方案
Webpack's alternative for bulk-require implementation issue
我正在使用 Webpack 和 Angular 构建 nw.js 应用程序。
我想通过这个样板 https://github.com/jakemmarsh/angularjs-gulp-browserify-boilerplate.
实现我在其他飞机 angular 应用程序中看到和使用的东西
以下代码用于代码和模块组织,并且做得很好。在每个模块中都有一个 _index.js 文件,其中包含以下内容:
var bulk = require('bulk-require');
module.exports = angular.module('app.services', []);
bulk(__dirname, ['./**/!(*_index|*.spec).js']);
这会导出 angular 模块,然后在同一个目录中,每个文件只需要它,并继续使用它(不太确定,但可能需要它的那个不必在同一个目录中目录):
var app = require('./_index');
app.controller('SomeCtrl', function...);
现在对于 Webpack 实现,我尝试调整这个示例 this:
require.context("..", true, /^grunt-[^\/]+\/tasks/[^\/]+$/);
这是我的版本
require.context(__dirname, true, /./**/!(*_index|*.spec).js/);
我很确定我的正则表达式在那里没有正确应用,所以我需要你的帮助来解决这个问题。
另一方面,我不确定样板文件的 bulk-require 是如何工作的,以及它究竟做了什么。我相信它以某种方式包含了所有文件,否则应用程序的其他部分不会知道它们。
因此,与其手动包含每个指令、服务和控制器,我会说它会为您完成这项工作。
不胜感激:)
我不确定,可能会弄错,但看起来在正则表达式中不正确使用 *
量词并且没有转义字符 /
和 .
;您尝试将冗余量词应用于 /
、*
、(
和 |
;
如果你得不到"any character zero or more times",你必须使用.*
像这样:
/\.\/.*\/!(.*_index|.*\.spec)\.js/
您还可以使用 \w
- 任何字母数字字符(而不是 .
);
/\.\/\w*\/!(\w*_index|\w*.spec)\.js/
我也不明白,你的意思是什么时候使用 !
;
此示例查找类似 aaa/bbb/ccc/blabla_index.js
& aaa/bbb/ccc/blabla.spec.js
:
的字符串
/(\w*\/)*(\w*_index|\w*\.spec)\.js/
希望对您有所帮助;
已解决。
我最终使用了这个 中的解决方案,并对其进行了一些调整。
@user3335966 提供的正则表达式 return 编辑了我要排除的文件,但无论如何谢谢 :)
/(\w*\/)*(\w*_index|\w*\.spec)\.js/
我们的想法是包括文件夹和子文件夹中的所有文件,但不包括 _index.js
。
但是这个正则表达式 return 每个 .js 文件:
/^(.*\.(js$))[^.]*$/igm
因为我不知道正则表达式,所以我最终排除了函数中的 _index.js
结果:
var req = require.context("./", true, /^(.*\.(js$))[^.]*$/igm);
req.keys().forEach(function(key){
if (key !== './_index.js') {
req(key);
}
});
所以现在我基本上是这样做的:
module.exports = angular.module('app.homeModule', []);
var req = require.context("./", true, /^(.*\.(js$))[^.]*$/igm);
req.keys().forEach(function(key){
if (key !== './_index.js') {
req(key);
}
});
通过这种方式,我定义了一个 angular 模块,并使其可供该文件夹内的所有其他文件(控制器、服务、指令)使用。
如果有人知道如何在正则表达式中进行排除,我将不胜感激。
对于我在 ElectronJS 上的 Angular 项目应用程序,我编写了一个小型 webpack 加载程序,用于按模式要求目录树中的所有文件,就像批量一样。
我用它来要求模块。
js文件示例:
//@require "./**/index.js"
我用它来要求所有模块依赖(js,html 模板缓存,图像)。
js文件示例:
//@require "./**/!(index|config|run)*"
并将其用于 css。
css 文件示例:
@require "./**/!(app|bootstrap).css";
我在我的项目中成功地使用了它。也许是别人让生活更轻松。
https://www.npmjs.com/package/required-loader
我正在使用 Webpack 和 Angular 构建 nw.js 应用程序。 我想通过这个样板 https://github.com/jakemmarsh/angularjs-gulp-browserify-boilerplate.
实现我在其他飞机 angular 应用程序中看到和使用的东西以下代码用于代码和模块组织,并且做得很好。在每个模块中都有一个 _index.js 文件,其中包含以下内容:
var bulk = require('bulk-require');
module.exports = angular.module('app.services', []);
bulk(__dirname, ['./**/!(*_index|*.spec).js']);
这会导出 angular 模块,然后在同一个目录中,每个文件只需要它,并继续使用它(不太确定,但可能需要它的那个不必在同一个目录中目录):
var app = require('./_index');
app.controller('SomeCtrl', function...);
现在对于 Webpack 实现,我尝试调整这个示例 this:
require.context("..", true, /^grunt-[^\/]+\/tasks/[^\/]+$/);
这是我的版本
require.context(__dirname, true, /./**/!(*_index|*.spec).js/);
我很确定我的正则表达式在那里没有正确应用,所以我需要你的帮助来解决这个问题。
另一方面,我不确定样板文件的 bulk-require 是如何工作的,以及它究竟做了什么。我相信它以某种方式包含了所有文件,否则应用程序的其他部分不会知道它们。 因此,与其手动包含每个指令、服务和控制器,我会说它会为您完成这项工作。
不胜感激:)
我不确定,可能会弄错,但看起来在正则表达式中不正确使用 *
量词并且没有转义字符 /
和 .
;您尝试将冗余量词应用于 /
、*
、(
和 |
;
如果你得不到"any character zero or more times",你必须使用.*
像这样:
/\.\/.*\/!(.*_index|.*\.spec)\.js/
您还可以使用 \w
- 任何字母数字字符(而不是 .
);
/\.\/\w*\/!(\w*_index|\w*.spec)\.js/
我也不明白,你的意思是什么时候使用 !
;
此示例查找类似 aaa/bbb/ccc/blabla_index.js
& aaa/bbb/ccc/blabla.spec.js
:
/(\w*\/)*(\w*_index|\w*\.spec)\.js/
希望对您有所帮助;
已解决。
我最终使用了这个
/(\w*\/)*(\w*_index|\w*\.spec)\.js/
我们的想法是包括文件夹和子文件夹中的所有文件,但不包括 _index.js
。
但是这个正则表达式 return 每个 .js 文件:
/^(.*\.(js$))[^.]*$/igm
因为我不知道正则表达式,所以我最终排除了函数中的 _index.js
结果:
var req = require.context("./", true, /^(.*\.(js$))[^.]*$/igm);
req.keys().forEach(function(key){
if (key !== './_index.js') {
req(key);
}
});
所以现在我基本上是这样做的:
module.exports = angular.module('app.homeModule', []);
var req = require.context("./", true, /^(.*\.(js$))[^.]*$/igm);
req.keys().forEach(function(key){
if (key !== './_index.js') {
req(key);
}
});
通过这种方式,我定义了一个 angular 模块,并使其可供该文件夹内的所有其他文件(控制器、服务、指令)使用。
如果有人知道如何在正则表达式中进行排除,我将不胜感激。
对于我在 ElectronJS 上的 Angular 项目应用程序,我编写了一个小型 webpack 加载程序,用于按模式要求目录树中的所有文件,就像批量一样。
我用它来要求模块。 js文件示例:
//@require "./**/index.js"
我用它来要求所有模块依赖(js,html 模板缓存,图像)。 js文件示例:
//@require "./**/!(index|config|run)*"
并将其用于 css。 css 文件示例:
@require "./**/!(app|bootstrap).css";
我在我的项目中成功地使用了它。也许是别人让生活更轻松。 https://www.npmjs.com/package/required-loader