Como exijo todos os arquivos em uma pasta no node.js?
precisa de algo como:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
javascript
node.js
directory
require
atormentar
fonte
fonte
var routes = require('auto-load')('routes');
com o novoauto-load
módulo [eu ajudei a criá-lo].Respostas:
Quando require é fornecido com o caminho de uma pasta, ele procura um arquivo index.js nessa pasta; se houver, ele usa isso e, se não houver, falha.
Provavelmente faria mais sentido (se você tiver controle sobre a pasta) criar um arquivo index.js, atribuir todos os "módulos" e simplesmente exigir isso.
yourfile.js
index.js
Se você não souber os nomes dos arquivos, escreva algum tipo de carregador.
Exemplo de trabalho de um carregador:
fonte
require
receber o caminho de uma pasta, ele procurará por umaindex.js
nessa pasta; se houver, ele usa isso e, se não houver, falha. Veja github.com/christkv/node-mongodb-native para obter um exemplo do mundo real disso:index.js
diretório raiz que requer./lib/mongodb
um diretório;./lib/mongodb/index.js'
disponibiliza todo o resto desse diretório.require
é uma função síncrona, portanto não há benefícios no retorno de chamada. Eu usaria o fs.readdirSync.package.json
nesse diretório. Assim:{main: './lib/my-custom-main-file.js'}
Eu recomendo usar glob para realizar essa tarefa.
fonte
glob
? você quer dizerglob-savior-of-the-nodejs-race
. Melhor resposta.Com base na solução do @ tbranyen, crio um
index.js
arquivo que carrega javascripts arbitrários na pasta atual como parte doexports
.Então você pode
require
este diretório de qualquer outro lugar.fonte
/\.js(on)?$/
seria melhor. Também não é!== null
redundante?Outra opção é usar o pacote require-dir, que é o seguinte. Ele também suporta recursão.
fonte
require-dir
porque exclui automaticamente o arquivo de chamada (índice) e o padrão é o diretório atual. Perfeito.require-dir
adicionou umafilter
opção.Eu tenho uma pasta / campos cheios de arquivos com uma única classe cada, ex:
Solte isso em fields / index.js para exportar cada classe:
Isso faz com que os módulos funcionem mais como em Python:
fonte
Mais uma opção são os recursos de combinação require-dir-all dos pacotes mais populares.
O mais popular
require-dir
não possui opções para filtrar os arquivos / diretórios e não possuimap
função (veja abaixo), mas usa um pequeno truque para encontrar o caminho atual do módulo.Em segundo lugar, a popularidade
require-all
tem filtragem e pré-processamento regexp, mas não possui caminho relativo, então você precisa usar__dirname
(isso tem prós e contras) como:Mencionado aqui
require-index
é bastante minimalista.Com
map
você, você pode fazer um pré-processamento, como criar objetos e passar valores de configuração (assumindo módulos abaixo dos construtores de exportações):fonte
Eu sei que esta pergunta tem mais de 5 anos e as respostas dadas são boas, mas eu queria algo um pouco mais poderoso para o express, então criei o
express-map2
pacote para o npm. Eu ia dar o nome simplesmenteexpress-map
, no entanto, as pessoas no yahoo já têm um pacote com esse nome, então tive que renomear meu pacote.1. uso básico:
uso do controlador:
2. uso avançado, com prefixos:
Como você pode ver, isso economiza uma tonelada de tempo e simplifica muito o roteamento de seu aplicativo, para escrever, manter e entender. Ele suporta todos os verbos http que expressam suporte, bem como o
.all()
método especial .fonte
Um módulo que eu tenho usado para esse caso de uso exato é exigir tudo .
Requer recursivamente todos os arquivos em um determinado diretório e seus subdiretórios, desde que não correspondam à
excludeDirs
propriedade.Ele também permite especificar um filtro de arquivo e como derivar as chaves do hash retornado dos nomes dos arquivos.
fonte
Estou usando os módulos de nó copy-to module para criar um único arquivo para exigir todos os arquivos em nosso sistema baseado em NodeJS.
O código para o nosso arquivo utilitário se parece com o seguinte:
Em todos os arquivos, a maioria das funções é gravada como exportação, assim:
Então, para usar qualquer função de um arquivo, basta chamar:
fonte
Expandindo nesta
glob
solução. Faça isso se desejar importar todos os módulos de um diretórioindex.js
e, em seguida, importe-oindex.js
em outra parte do aplicativo. Observe que os literais de modelo não são suportados pelo mecanismo de destaque usado pelo stackoverflow, portanto, o código pode parecer estranho aqui.Exemplo completo
Estrutura de diretórios
globExample / example.js
globExample / foobars / index.js
globExample / foobars / inesperado.js
globExample / foobars / barit.js
globExample / foobars / fooit.js
No projeto interno com o
glob
instalado , executenode example.js
fonte
Pode usar: https://www.npmjs.com/package/require-file-directory
fonte
Exija todos os arquivos da
routes
pasta e aplique como middleware. Não são necessários módulos externos.fonte
Usando esta função, você pode exigir um diretório inteiro.
fonte
Se você incluir todos os arquivos de * .js no exemplo de diretório ("app / lib / *. Js"):
No diretório app / lib
example.js:
example-2.js:
No aplicativo de diretório, crie index.js
index.js:
fonte