Na linguagem Node.js, não há diferença essencial entre pacotes e módulos. Os pacotes são uma abstração mais profunda com base em módulos. Os pacotes encapsulam uma certa função independente para liberação, atualização, gerenciamento de dependências e controle de versão. O Node.js implementa o mecanismo de pacote de acordo com a especificação Commonjs e desenvolve o NPM para resolver as necessidades de liberação e aquisição do pacote.
O pacote Node.js é um diretório que contém o pacote Descrição File Package.json no formato JSON. O pacote Node.js segue basicamente a especificação Commonjs, por isso possui as seguintes características:
Recursos de pacote definidos pela especificação Commonjs:
1) O diretório de nível superior contém o arquivo package.json;
2) o Bin Directory armazena arquivos binários;
3) o Lib Directory armazena arquivos JavaScript;
4) o diretório do DOC armazena documentos;
5) O diretório de teste armazena testes de unidade.
O módulo Node.js e o arquivo corresponde um por um. O arquivo não pode apenas ser um arquivo de origem JavaScript ou arquivo binário, mas também um diretório. O pacote mais simples é um módulo de diretório.
O pacote Node.js geralmente é uma coleção de alguns módulos, que fornece abstrações de nível superior com base em módulos, o que equivale a fornecer algumas bibliotecas de funções de interface fixa.
Ao personalizar o Package.json, podemos criar pacotes mais complexos, mais completos e mais padronizados para publicação.
Quando o Node.js chama um pacote, ele primeiro verifica o campo principal do arquivo package.json no pacote e o usa como o módulo de interface do pacote. Se o campo principal do arquivo package.json não existir, o Node.js tentará encontrar index.js ou index.node como interface do pacote.
O arquivo package.json é um arquivo usado pela especificação Commonjs para descrever o pacote. O arquivo package.json que cumpre totalmente a especificação deve conter os seguintes campos:
1) Nome: Nome do pacote. O nome do pacote é único e consiste em letras minúsculas, números e sublinhados e não pode conter espaços.
2) Descrição: Descrição do pacote. Uma breve descrição do pacote.
3) Versão: Número da versão. String de versão que atende à especificação de reconhecimento de versão semântica.
4) Palavras -chave: Matriz de palavras -chave, geralmente usada para pesquisa.
5) mantenedores: MATERIA DE METORNES. Cada elemento contém campos de nome, email (opcional) e web (opcional).
6) Colaboradores: Matriz de colaboradores. O formato é o mesmo que a matriz de mantenedor. O autor do pacote deve ser o primeiro elemento da matriz colaboradora.
7) Bugs: o endereço para enviar o bug pode ser um URL ou endereço de e -mail.
8) Licenças: Matriz de licença. Cada elemento deve conter os campos Tipo (Nome da Licença) e URL (endereço vinculado aos texto da licença).
9) Repositórios: uma variedade de endereços de hospedagem de repositório. Cada elemento deve conter o tipo (tipo do repositório, como Git), URL (endereço do repositório) e caminho (opcional em relação ao caminho do repositório).
10) Dependências: dependências de pacotes. é uma matriz associativa que consiste em nome do pacote e número da versão.
Nota: A especificação "Reconhecimento da Versão Semântica" é um conjunto de especificações de nomeação de versão propostas por países estrangeiros. O objetivo original era resolver vários problemas de comparação de tamanho de número de versão e atualmente é adotado por muitos sistemas de gerenciamento de pacotes.
Aqui está um exemplo de pacote.json que cumpre completamente a especificação Commonjs:
A cópia do código é a seguinte:
{
"Nome": "testpackage",
"Descrição": "meu pacote para Commonjs.",
"versão": "0.1.0",
"Palavras -chave": [
"TestPackage",
"Liq"
],
"mantenedores": [
{
"Nome": "liq",
"E -mail": "[email protected]",
}
],
"Colaboradores": [
{
"Nome": "liq",
"Web": "http://blog.csdn.net/chszs"
}
],
"Bugs": {
"Mail": "[email protected]",
"Web": "http://blog.csdn.net/chszs"
},
"Licenças": [
{
"Tipo": "Apache License v2",
"url": "http://www.apache.org/license/apache2.html"
}
],
"Repositórios": [
{
"Tipo": "git",
"URL": "http://github.com/chszs/packagetest.git"
}
],
"Dependências": {
"webkit": "1.2",
"SSL": {
"Gnutls": ["1.0", "2.0"],
"OpenSSL": "0.9.8"
}
}
}