Digamos que eu tenho um arquivo chamado app.js. Bem simples:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
E se eu tiver funções dentro de "tools.js". Como eu os importaria para usar no apps.js?
Ou ... devo transformar "ferramentas" em um módulo e depois exigir? << parece difícil, prefiro fazer a importação básica do arquivo tools.js.
javascript
import
header
node.js
TIMEX
fonte
fonte
require
uma pasta no mesmo diretório do Windows. Você precisa usar o endereçamento no estilo unix: em./mydir
vez de simplesmente antigomydir
.node_modules
pasta externa . npmjs.com/package/node-import Espero que possa ajudar. Obrigado!Respostas:
Você pode exigir qualquer arquivo js, basta declarar o que deseja expor.
E no seu arquivo de aplicativo:
fonte
require("http://javascript-modules.googlecode.com/svn/functionChecker.js")
parece não importar o módulo corretamente. Existe alguma outra maneira de importar scripts externos?Se, apesar de todas as outras respostas, você ainda desejar incluir tradicionalmente um arquivo em um arquivo de origem node.js., você pode usar isto:
+''
é necessária para obter o conteúdo do arquivo como uma string e não como um objeto (você também pode usar,.toString()
se preferir).include()
função utilitária ou algo parecido).Observe que, na maioria dos casos, isso é uma prática ruim e você deve escrever um módulo . No entanto, existem situações raras, em que a poluição do seu contexto / espaço de nome local é o que você realmente deseja.
Atualização 06/08/2015
Observe também que isso não funcionará
"use strict";
(quando você estiver no "modo estrito" ) porque funções e variáveis definidas no arquivo "importado" não podem ser acessadas pelo código que importa. O modo estrito aplica algumas regras definidas pelas versões mais recentes do padrão de idioma. Esse pode ser outro motivo para evitar a solução descrita aqui.fonte
Você não precisa de novas funções nem novos módulos. Você simplesmente precisa executar o módulo que está chamando, se não quiser usar o espaço para nome.
no tools.js
no app.js
ou em qualquer outro .js como myController.js:
ao invés de
var tools = require('tools.js')
que nos forçam a usar um espaço para nome e chamar ferramentas comotools.sum(1,2);
podemos simplesmente ligar
e depois
no meu caso, eu tenho um arquivo com os controladores ctrls.js
e eu posso usar
Categories
em todos os contextos como classe pública depoisrequire('ctrls.js')()
fonte
this
em uma função é o escopo global quando a função é chamada diretamente (sem limite de forma alguma).require('blah.js')();
deve permita-me importá-los todos no mesmo escopo !!! obrigado!!!Crie dois arquivos js
Arquivo js principal
Saída do console
fonte
Aqui está uma explicação clara e simples:
Conteúdo Server.js:
Conteúdo do Helpers.js:
fonte
Eu também estava procurando uma função 'include' do NodeJS e verifiquei a solução proposta pelo Udo G - consulte a mensagem https://stackoverflow.com/a/8744519/2979590 . Seu código não funciona com meus arquivos JS incluídos. Finalmente resolvi o problema assim:
Claro, isso ajuda.
fonte
crie dois arquivos, por exemplo,
app.js
etools.js
app.js
tools.js
resultado
fonte
dizer que quer chamar a função de ping () e adicionar (30,20) , que está em lib.js arquivo a partir de main.js
main.js
lib.js
fonte
O módulo vm no Node.js fornece a capacidade de executar o código JavaScript dentro do contexto atual (incluindo o objeto global). Consulte http://nodejs.org/docs/latest/api/vm.html#vm_vm_runinthiscontext_code_filename
Observe que, a partir de hoje, há um erro no módulo vm que previne que runInThisContext faça o que é certo quando invocado em um novo contexto. Isso só importa se o seu programa principal executa o código dentro de um novo contexto e, em seguida, esse código chama runInThisContext. Consulte https://github.com/joyent/node/issues/898
Infelizmente, a abordagem with (global) sugerida por Fernando não funciona para funções nomeadas como "function foo () {}"
Em resumo, aqui está uma função include () que funciona para mim:
fonte
Udo G. disse:
Ele está certo, mas há uma maneira de afetar o escopo global de uma função. Melhorando seu exemplo:
Espero que ajude.
fonte
Funcionou comigo como o seguinte ....
Lib1.js
agora no arquivo Main.js, você precisa incluir o Lib1.js
Lembre-se de colocar o Lib1.js na pasta node_modules .
fonte
Você pode colocar suas funções em variáveis globais, mas é uma prática recomendada apenas transformar seu script de ferramentas em um módulo. Realmente não é muito difícil - basta anexar sua API pública ao
exports
objeto. Dê uma olhada no módulo de exportações do Understanding Node.js. para obter mais detalhes.fonte
Outra maneira de fazer isso, na minha opinião, é executar tudo no arquivo lib quando você chama a função require () using (function (/ * coisas aqui * /) {}) (); fazer isso tornará todas essas funções de escopo global, exatamente como a solução eval ()
src / lib.js
E então, no seu código principal, você pode chamar suas funções por nome como:
main.js
Fará essa saída
Preste atenção ao indefinido quando você chamar meu object.funcFour () ; será o mesmo se você carregar com eval () . Espero que ajude :)
fonte
Eu só quero adicionar, caso você precise apenas de determinadas funções importadas do seu tools.js , você pode usar uma atribuição de desestruturação suportada no node.js desde a versão 6.4 - consulte node.green .
Exemplo : (os dois arquivos estão na mesma pasta)
resultado:
true
Isso também evita que você atribua essas funções como propriedades de outro objeto, como é o caso na seguinte atribuição (comum):
const tools = require('./tools.js');
para onde você precisa ligar
tools.isEven(10)
.NOTA:
Não se esqueça de prefixar o nome do arquivo com o caminho correto - mesmo se os dois arquivos estiverem na mesma pasta, você deverá prefixar
./
Dos documentos do Node.js :
fonte
app.js
tools.js
fonte
Incluir arquivo e executá-lo em determinado contexto (não global)
fileToInclude.js
main.js
fonte
Esta é a melhor maneira que eu criei até agora.
Você ainda precisa informar o que deseja exportar
fonte
Como você está tendo um arquivo
abc.txt
e muito mais?Criar 2 arquivos:
fileread.js
efetchingfile.js
, em seguida,fileread.js
escrever este código:Em
fetchingfile.js
escrever este código:Agora, em um terminal: $ node fetchingfile.js --file = abc.txt
Você está passando o nome do arquivo como argumento, além disso, inclua todos os arquivos em
readfile.js
vez de passá-lo.obrigado
fonte
Você pode simplesmente simples
require('./filename')
.Por exemplo.
Observe que:
fonte
Eu também estava procurando por uma opção para incluir código sem escrever módulos, resp. use as mesmas fontes independentes testadas de um projeto diferente para um serviço Node.js. A resposta de jmparatte fez isso por mim.
O benefício é que você não polui o espaço para nome, não tenho problemas
"use strict";
e funciona bem.Aqui está uma amostra completa :
Script a carregar - /lib/foo.js
SampleModule - index.js
Espero que isso tenha sido útil de alguma forma.
fonte
Outro método ao usar a estrutura node.js e express.js
armazene isso em um arquivo js chamado se na pasta static
Agora, para usar a função
fonte
Eu vim com um método bastante bruto de lidar com isso para modelagem de HTML. Similar ao PHP
<?php include("navigation.html"); ?>
fonte
Se você quiser tirar proveito da arquitetura de múltiplas CPUs e microsserviços, para acelerar as coisas ... Use RPCs em processos bifurcados.
Parece complexo, mas é simples se você usar polvo .
Aqui está um exemplo:
em tools.js, adicione:
no app.js, adicione:
divulgação - eu sou o autor do polvo e construí-o para um caso de uso semelhante, já que não consegui encontrar nenhuma biblioteca leve.
fonte
Para transformar "ferramentas" em um módulo, não vejo nada difícil. Apesar de todas as outras respostas, eu ainda recomendaria o uso do module.exports:
Agora, precisamos atribuir essas exportações ao escopo global (no seu aplicativo | index | server.js)
Agora você pode consultar e chamar a função como:
fonte
Usar:
app.js:
fonte
./tools.js