Javascript 如何将文件夹中的所有文件作为模块导入,并将所有文件作为对象导出?
我试图将每个文件作为模块导出到某个文件夹中,作为单个对象导入。我该怎么做 我用一个长文件制作了一个javascript插件。我现在正试图让它被几个文件分开。我用的是网页包 在我的插件代码中,有一个巨大的对象名为fn,它包含40~50个函数,每个函数有200~300行。为了拆分它们,我创建了一个名为fn的文件夹,并将每个函数作为每个文件。每个文件名和函数名都是相同的。因此,名为foo的函数默认导出到fn文件夹中名为foo.js的文件中 现在我试着把它们全部导入,然后像这样导出为一个对象 src/fn/foo_或_which.js src/fn/index.js src/index.js 但我认为这没有意义。现在我必须每四次键入相同的单词,以便在fn对象中添加函数 我发现导入/导出系统不支持从文件夹导入所有文件。那么,我应该使用什么以及如何编写代码来实现这一点呢 有什么办法可以这样做吗?我不管这种方式是否是导入/导出系统,只要这种方式在网页上有效 src/index.jsJavascript 如何将文件夹中的所有文件作为模块导入,并将所有文件作为对象导出?,javascript,webpack,ecmascript-6,Javascript,Webpack,Ecmascript 6,我试图将每个文件作为模块导出到某个文件夹中,作为单个对象导入。我该怎么做 我用一个长文件制作了一个javascript插件。我现在正试图让它被几个文件分开。我用的是网页包 在我的插件代码中,有一个巨大的对象名为fn,它包含40~50个函数,每个函数有200~300行。为了拆分它们,我创建了一个名为fn的文件夹,并将每个函数作为每个文件。每个文件名和函数名都是相同的。因此,名为foo的函数默认导出到fn文件夹中名为foo.js的文件中 现在我试着把它们全部导入,然后像这样导出为一个对象 src/f
自动这样做似乎是一个好主意,但有了webpack,它将需要特殊的插件来处理它 但是另一个选择如果重复部分是你主要关心的问题,我可能会有另一个想法给你 Webpack也可以处理commonjs模块。因此,您可以做的是->
module.exports = {
foo: require('./foo'),
bar: require('./bar'),
fooz: require('./fooz'),
baz: require('./baz'),
kee: require('./kee'),
poo: require('./poo'),
tar: require('./tar'),
doo: require('./doo')
};
另一个建议是,如果您想暂时替换baz,您可以将require更改为./baz temp等
另外,用小写字母命名文件总是一个好主意,所以如果您想包含一个自动命名的类,那么这将是一个问题,。但是只需执行->Foo:require./Foo'就可以了。自动执行这项操作似乎是个好主意,但有了webpack,它将需要特殊的插件来处理它
const fs = require('fs');
const path = require('path');
const basename = path.basename(__filename);
const functions = {}
fs
.readdirSync("./")
.filter(file => (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'))
.map((file) => {functions[file.slice(0, -3)] = require(path.join(__dirname, file})))
module.exports = functions;
但是另一个选择如果重复部分是你主要关心的问题,我可能会有另一个想法给你
Webpack也可以处理commonjs模块。因此,您可以做的是->
module.exports = {
foo: require('./foo'),
bar: require('./bar'),
fooz: require('./fooz'),
baz: require('./baz'),
kee: require('./kee'),
poo: require('./poo'),
tar: require('./tar'),
doo: require('./doo')
};
另一个建议是,如果您想暂时替换baz,您可以将require更改为./baz temp等
另外,用小写字母命名文件总是一个好主意,所以如果您想包含一个自动命名的类,那么这将是一个问题,。但是只要做->Foo:require./Foo就可以了
const fs = require('fs');
const path = require('path');
const basename = path.basename(__filename);
const functions = {}
fs
.readdirSync("./")
.filter(file => (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'))
.map((file) => {functions[file.slice(0, -3)] = require(path.join(__dirname, file})))
module.exports = functions;
需要帮忙吗
是否需要此帮助?您可以尝试使用此处描述的babel通配符插件:@KrzysztofKrzeszewski它真的很有帮助。谢谢。您可以尝试使用巴贝尔通配符插件,如这里所述:@KrzysztofKrzeszewski,它真的很有帮助。谢谢。我可以在网页中使用fs吗?我正在处理的东西不是在WebServer上运行的,我可以在webpack中使用fs吗?webpack只是一个节点包,所以如果你可以运行webpack,你可以运行上面的代码。@keith不是真的。@Jonaswills不确定你的意思,你是说你不再需要节点来运行webpack?@Jonaswills我不确定上面的内容是海报在运行时运行的,而是他可以用来制作.js文件的代码。我可以在webpack中使用fs吗?我正在处理的东西不是在WebServer上运行的,我可以在webpack中使用fs吗?webpack只是一个节点包,所以如果你可以运行webpack,你可以运行上面的代码。@keith不是真的。@Jonaswills不确定你的意思,你是说你不再需要节点来运行webpack?@Jonaswills我不确定上面的内容是海报在运行时运行的,但是,他可以使用代码来创建.js文件,使之能够更改其名称是很好的。但在我的情况下,我需要一些不需要处理的东西。能够更改它的名称是很好的。但就我而言,我需要一些不需要处理的东西。
module.exports = {
foo: require('./foo'),
bar: require('./bar'),
fooz: require('./fooz'),
baz: require('./baz'),
kee: require('./kee'),
poo: require('./poo'),
tar: require('./tar'),
doo: require('./doo')
};
const fs = require('fs');
const path = require('path');
const basename = path.basename(__filename);
const functions = {}
fs
.readdirSync("./")
.filter(file => (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'))
.map((file) => {functions[file.slice(0, -3)] = require(path.join(__dirname, file})))
module.exports = functions;