Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Node.js - #2 - Sistema de Módulos - Rodrigo Branas

1.657 Aufrufe

Veröffentlicht am

Nesta apresentação, vamos falar sobre o sistema de módulos do Node.js.

Veröffentlicht in: Internet
  • Als Erste(r) kommentieren

Node.js - #2 - Sistema de Módulos - Rodrigo Branas

  1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Sistema de Módulos
  2. 2. No Node.js, existe uma relação direta entre um arquivo e um módulo
  3. 3. Criando um novo módulo serialGenerator.js 1. var  max  =  10000;   2.       3. var  generate  =  function()  {   4.    return  Math.floor(Math.random()  *  max);   5. };  
  4. 4. Como fazer para utilizar um módulo por meio de outro?
  5. 5. http://wiki.commonjs.org/wiki/Modules/1.1
  6. 6. A função require é responsável por retornar o que foi exportado de um outro módulo
  7. 7. Criando um novo módulo serialGenerator.js 1. var  max  =  10000;   2.       3. var  generate  =  function()  {   4.    return  Math.floor(Math.random()  *  max);   5. };  
  8. 8. Utilizando o módulo serialGenerator index.js 1. var  serialGenerator  =  require('./serialGenerator.js');   2. console.log(serialGenerator);
  9. 9. Por que o módulo está vazio?
  10. 10. Tudo que é definido dentro do módulo é privado
  11. 11. Exportando a função generate serialGenerator.js 1. var  max  =  10000;   2.       3. module.exports.generate  =  function()  {   4.    return  Math.floor(Math.random()  *  max);   5. };  
  12. 12. Utilizando o módulo serialGenerator index.js 1. var  serialGenerator  =  require('./serialGenerator.js');   2. console.log(serialGenerator);
  13. 13. Invocando a função generate index.js 1. var  serialGenerator  =  require('./serialGenerator.js');   2. console.log(serialGenerator.generate());
  14. 14. Também é possível exportar o módulo utilizando exports ou this
  15. 15. Exportando a função generate serialGenerator.js 1. var  max  =  10000;   2.       3. exports.generate  =  function()  {   4.    return  Math.floor(Math.random()  *  max);   5. };  
  16. 16. Exportando a função generate serialGenerator.js 1. var  max  =  10000;   2.       3. this.generate  =  function()  {   4.    return  Math.floor(Math.random()  *  max);   5. };  
  17. 17. Qual é a diferença entre module.exports, exports e this?
  18. 18. Todos eles apontam para a mesma referência 1. console.log(module.exports  ===  exports);  //  true   2. console.log(module.exports  ===  this);  //  true   3. console.log(exports  ===  this);  //  true
  19. 19. Cuidado, apenas module.exports é retornado da função require
  20. 20. https://github.com/nodejs/node-v0.x-archive/blob/master/src/node.js
  21. 21. Exibindo argumentos de um módulo 1. console.log(arguments);
  22. 22. Como um módulo é localizado?
  23. 23. Primeiro, o algoritmo de busca tenta localizar um módulo core. Existem vários como: net, http, url, fs, zlib, crypto, events, stream, os, vm, util, entre outros.
  24. 24. Localizando um módulo core 1. require('http');
  25. 25. Se o nome do módulo iniciar com '/', '../' ou './', o algoritmo de busca irá localizar o módulo por meio do caminho absoluto no sistema de arquivos.
  26. 26. Localizando um módulo na mesma pasta 1. require('./serialGenerator.js');
  27. 27. Localizando um módulo por meio do caminho absoluto 1. require('/Users/rodrigobranas/Development/workspace/youtube/ NodeJS_2_Sistema_de_Modulos/serialGenerator.js');
  28. 28. Localizando um módulo por meio do caminho relativo 1. require('../serialGenerator.js');
  29. 29. Terminar o nome com '.js' é opcional, o algoritmo de busca irá tentar colocar o '.js' no final caso não encontre o módulo.
  30. 30. Localizando um módulo na mesma pasta 1. require('./serialGenerator');
  31. 31. Localizando um módulo por meio do caminho absoluto 1. require('/Users/rodrigobranas/Development/workspace/youtube/ NodeJS_2_Sistema_de_Modulos/serialGenerator');
  32. 32. Localizando um módulo por meio do caminho relativo 1. require('../serialGenerator');
  33. 33. Se o módulo não começar com '/', '../' ou './' o algoritmo de busca da função require vai procurar dentro da pasta node_modules.
  34. 34. Localizando um módulo em node_modules/serialGenerator.js 1. require('serialGenerator');
  35. 35. Localizando um módulo em node_modules/serialGenerator/index.js 1. require('serialGenerator');
  36. 36. Ao utilizar o NPM, os módulos instalados são armazenados na pasta node_modules
  37. 37. A função require utiliza um mecanismo de cache
  38. 38. https://github.com/nodejs/node-v0.x-archive/blob/master/src/node.js
  39. 39. O módulo serialGenerator ficou armazenado em cache 1. var  serialGeneratorA  =  require('./serialGenerator.js');   2. var  serialGeneratorB  =  require('./serialGenerator.js');   3. console.log(serialGeneratorA  ===  serialGeneratorB);  //  true
  40. 40. Existem muitas formas de criar um módulo e exportá-lo
  41. 41. Criando um módulo gerador de serial serialGenerator.js 1. var  max  =  10000;   2.       3. var  generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };
  42. 42. Exportando por meio de um objeto
  43. 43. Exportando por meio de um objeto serialGenerator.js 1. var  max  =  10000;   2.       3. module.exports.generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };
  44. 44. Exportando por meio de um objeto serialGenerator.js 1. var  max  =  10000;   2.       3. exports.generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };
  45. 45. Exportando por meio de um objeto serialGenerator.js 1. var  max  =  10000;   2.       3. this.generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };
  46. 46. Exportando por meio de um objeto serialGenerator.js 1. var  max  =  10000;   2.       3. var  generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };   6.       7. module.exports  =  {   8.    generate:  generate   9. };
  47. 47. Não funciona! 1. var  max  =  10000;   2.       3. var  generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };   6.       7. exports  =  {   8.    generate:  generate   9. };
  48. 48. Não funciona! 1. var  max  =  10000;   2.       3. var  generate  =  function  ()  {   4.    return  Math.floor(Math.random()  *  max);   5. };   6.       7. this  =  {   8.    generate:  generate   9. };
  49. 49. Cuidado, apenas module.exports é retornado da função require
  50. 50. Exportando por meio de um objeto serialGenerator.js 1. var  createSerialGenerator  =  function  ()  {   2.    var  max  =  10000;   3.       4.    var  generate  =  function  ()  {   5.        return  Math.floor(Math.random()  *  max);   6.    };   7.       8.    return  {   9.        generate:  generate   10.    };   11. }   12.       13. module.exports  =  createSerialGenerator();
  51. 51. Exportando por meio de um objeto serialGenerator.js 1. var  SerialGenerator  =  function  ()  {   2.    var  max  =  10000;   3.       4.    this.generate  =  function  ()  {   5.        return  Math.floor(Math.random()  *  max);   6.    };   7. };   8.       9. module.exports  =  new  SerialGenerator();
  52. 52. Por conta do mecanismo de cache, o objeto retornado é o mesmo 1. var  serialGeneratorA  =  require('./serialGenerator');   2. var  serialGeneratorB  =  require('./serialGenerator');   3. console.log(serialGeneratorA  ===  serialGeneratorB);  //  true
  53. 53. Exportando por meio de uma função
  54. 54. Exportando por meio de uma função serialGenerator.js 1. var  createSerialGenerator  =  function  ()  {   2.    var  max  =  10000;   3.       4.    var  generate  =  function  ()  {   5.        return  Math.floor(Math.random()  *  max);   6.    };   7.       8.    return  {   9.        generate:  generate   10.    };   11. }   12.       13. module.exports  =  createSerialGenerator;
  55. 55. Ao invocar a função, temos objetos diferentes como resultado 1. var  createSerialGenerator  =  require('./serialGenerator');   2. var  serialGeneratorA  =  createSerialGenerator();   3. var  serialGeneratorB  =  createSerialGenerator();   4. console.log(serialGeneratorA  ===  serialGeneratorB);  //  false
  56. 56. Exportando por meio de um objeto serialGenerator.js 1. var  SerialGenerator  =  function  ()  {   2.    var  max  =  10000;   3.       4.    this.generate  =  function  ()  {   5.        return  Math.floor(Math.random()  *  max);   6.    };   7. };   8.       9. module.exports  =  SerialGenerator;
  57. 57. Ao invocar a função, temos objetos diferentes como resultado 1. var  SerialGenerator  =  require('./serialGenerator');   2. var  serialGeneratorA  =  new  SerialGenerator();   3. var  serialGeneratorB  =  new  SerialGenerator();   4. console.log(serialGeneratorA  ===  serialGeneratorB);  //  false
  58. 58. Rodrigo Branas   Agile Code: http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas

×