O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

1.627 visualizações

Publicada em

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

Publicada em: Internet
  • Seja o primeiro a comentar

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

×