A compreensão em profundidade do pacote NPM

Pacote com NPM

Especificação define o pacote commonjs é, na verdade, muito simples, que é descrito pela estrutura de ficheiro do pacote e as duas partes, o ex-arquivos para vários pacote de tecido, o último é usado para descrever o pacote de informação para leitura externo tomando análise.

estrutura de pacotes

Pacote é na verdade um arquivo, um diretório que está diretamente empacotado como .zip ou formato de arquivo tar.gz, descompressão após a instalação é reduzido para o diretório. Commonjs diretório do pacote total conformidade com as especificações deve conter os seguintes arquivos.

  1. package.json: pacote de arquivo de descrição.
  2. bin: diretório para os arquivos binários executáveis.
  3. lib: Diretório de código JavaScript para armazenar.
  4. doc: o diretório usado para armazenar documentos.
  5. teste: meios para armazenar o código de teste.

Você pode ver, especificação do pacote commonjs em termos de documentação, testes, etc. são feitas considerando. Quando tornado público depois que um pacote for concluída, o usuário pode ver o teste de unidade e documentação, que dá às pessoas uma sensação de prático e confiável.

arquivo de descrição do pacote

arquivos de descrição de pacotes para a expressão da informação não-código referente a ele é uma --package.json arquivo de formato JSON, localizado no diretório raiz do pacote, é uma parte importante do pacote. E todos os atos estão intimamente relacionados campo NPM arquivos de descrição de pacotes.

Commonjs deve definir o arquivo campo package.json.

  1. Nome: O nome do pacote. Ela exige define especificação da composição de caracteres minúsculas e números, pode conter \ _ e -, mas os espaços não são permitidos. nome do pacote deve ser único, a fim de equívocos evitar o mesmo conflito de nomes ao anunciado. Além disso, NPM também recomendou não relacionados com os js nó ou repetição indicam que é um módulo de JavaScript ou Node no nome do pacote.
  2. Descrição: pacote de Introdução.
  3. versão: número de versão.
  4. Palavras-chave: Palavras-chave array, NPM é usado principalmente para a busca classificação. A boa palavra-chave usuários gama ajuda a encontrar rapidamente o pacote que você escreve.
  5. mantenedores: Lista de mantenedor de pacotes, cada um dos mantenedor pelo nome, e-mail e web três atributos.

NPM realizado pela propriedade autoridade de certificação.

  1. contribuctors: a lista de contribuintes.
  2. insetos: uma lata de realimentação bug endereço da página ou o endereço de e-mail.
  3. licenças: uma lista da licença atual usado pelo pacote, indicando que os usos de pacote em que uma licença.
  4. repositórios: hospedam o código-fonte de uma lista de locais para indicar qual o caminho e endereço do código-fonte pode acessar o pacote passar.
  5. Dependências: Lista Packet usando pacote atual depende. Esta propriedade é muito importante, NPM irá carregar automaticamente o pacote usando esta propriedade.

Além de campo de preenchimento obrigatório, a especificação também define parte de um campo opcional

  1. homepage: endereço do site do pacote atual.

  2. os: uma lista de sistemas operacionais suportados. O valor desses sistemas operacionais incluem AIX, FreeBSD, Linux, MacOS, Solaris vxworks, janelas. Se a lista de configuração está vazio, nenhum sistema operacional para fazer suposições.

  3. CPU: Lista de Suporte de arquitetura de CPU.

  4. motor: Suportado js lista de motores, uma lista de valores válidos incluem EJS motor, Flusspferd, gpsee, JSC, spidermonkey, narval, nó, v8.

  5. embutida: bandeira se o pacote corrente é construído no componente padrão no sistema subjacente.

  6. directórios: Package catálogo descrição.

  7. implementos: realização de uma lista normalizada, marcar o pacote atual que implementa a commonjs especificação.

  8. roteiros: Descrição Script do objeto. É usado principalmente para instalar o gerenciador de pacotes, compilar, testar e descarga de pacotes, proporcionando um mecanismo de gancho.

    //示例如下:
    "scripts":{
    	"install":"install.js",
    	"uninstall":"uninstall.js",
    	"build":"build.js",
    	"test":"test.js"
    }
    

Definir especificação do pacote pode ajudar a resolver o problema Nó dependências instalado, enquanto NPM é baseada na implementação da especificação. Inicialmente, as ferramentas NPM estão lá Issac Z.Schlueter criar um separado, fornecido para os serviços de nó Node Package Manager, necessidade de ser instalado separadamente. Mais tarde, quando integrado na versão v6.3 Node como o gerenciador de pacotes padrão, como parte do conjunto pacote de instalação.

Descrita no arquivo de especificação no pacote, NPM campo real precisa principalmente nome, versão, descrição, palavras-chave, repositórios, autor, bin, principais, scripts, motores, dependências, devDependencies.

A diferença entre a especificação do pacote é mais autor, bin, principal e devDependencies quatro campos.

Autor: Pacote autores.

bin: Alguns autores de pacotes esperam que o pacote pode ser usado como uma ferramenta de linha de comando. Depois de configurar o campo bin, por npm install package_name -gpode ser adicionado ao caminho de execução de comandos de script, então você pode executar diretamente na linha de comando. módulo de comando -G pela montagem do pacote chamado modelo global.

principal: método de introdução módulo exigem () quando introduzido na embalagem, verifica o campo de prioridade, e como os módulos restantes no pacote de entrada. Se o campo não existe, require () método procura index.js no diretório do pacote, index.node, arquivo index.json como a entrada padrão.

devDependencies: Alguns módulos só precisa confiar em desenvolvimento. Este atributo de configuração, o desenvolvedor pode ser solicitado dependências do pacote de instalação subseqüentes.

//以下是node比较有名的框架express项目的package.json文件
{
  "name": "express",
  "description": "Fast, unopinionated, minimalist web framework",
  "version": "4.17.1",
  "author": "TJ Holowaychuk <[email protected]>",
  "contributors": [
    "Aaron Heckmann <[email protected]>",
    "Ciaran Jessup <[email protected]>",
    "Douglas Christopher Wilson <[email protected]>",
    "Guillermo Rauch <[email protected]>",
    "Jonathan Ong <[email protected]>",
    "Roman Shtylman <[email protected]>",
    "Young Jae Sim <[email protected]>"
  ],
  "license": "MIT",
  "repository": "expressjs/express",
  "homepage": "http://expressjs.com/",
  "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "dependencies": {
    "accepts": "~1.3.7",
    "array-flatten": "1.1.1",
    "body-parser": "1.19.0",
    "content-disposition": "0.5.3",
    "content-type": "~1.0.4",
    "cookie": "0.4.0",
    "cookie-signature": "1.0.6",
    "debug": "2.6.9",
    "depd": "~1.1.2",
    "encodeurl": "~1.0.2",
    "escape-html": "~1.0.3",
    "etag": "~1.8.1",
    "finalhandler": "~1.1.2",
    "fresh": "0.5.2",
    "merge-descriptors": "1.0.1",
    "methods": "~1.1.2",
    "on-finished": "~2.3.0",
    "parseurl": "~1.3.3",
    "path-to-regexp": "0.1.7",
    "proxy-addr": "~2.0.5",
    "qs": "6.7.0",
    "range-parser": "~1.2.1",
    "safe-buffer": "5.1.2",
    "send": "0.17.1",
    "serve-static": "1.14.1",
    "setprototypeof": "1.1.1",
    "statuses": "~1.5.0",
    "type-is": "~1.6.18",
    "utils-merge": "1.0.1",
    "vary": "~1.1.2"
  },
  "devDependencies": {
    "after": "0.8.2",
    "connect-redis": "3.4.1",
    "cookie-parser": "~1.4.4",
    "cookie-session": "1.3.3",
    "ejs": "2.6.1",
    "eslint": "2.13.1",
    "express-session": "1.16.1",
    "hbs": "4.0.4",
    "istanbul": "0.4.5",
    "marked": "0.6.2",
    "method-override": "3.0.0",
    "mocha": "5.2.0",
    "morgan": "1.9.1",
    "multiparty": "4.2.1",
    "pbkdf2-password": "1.2.1",
    "should": "13.2.3",
    "supertest": "3.3.0",
    "vhost": "~3.0.2"
  },
  "engines": {
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "scripts": {
    "lint": "eslint .",
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
  },
  "__npminstall_done": "Sun Feb 16 2020 11:22:54 GMT+0800 (GMT+08:00)",
  "_from": "[email protected]",
  "_resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz"
}

funções comuns NPM

teoria pacote Especificação commonjs, NPM é uma prática que a. Para termos Nó, NPM ajudar a completar a liberação, instalação e dependem de módulos de terceiros e assim por diante. Por NPM, um poço é formado entre o nó e o módulo ecossistema de terceiros.

dependências de instalação

Dependências de instalação são o uso mais comum de NPM, sua declaração de execução é npm instalar expressa .. Após executar o comando, NPM é criado no diretório diretório node_module atual, em seguida, criar um diretório sob o diretório expressa node_module, em seguida, descompactá-lo para este diretório.

Depois de dependências de instalação, ligue directamente o código exigem ( 'expressar'), pode ser introduzido no saco, o método requer () de análise irá ser feita através do caminho, encontrar um caminho para a localização do módulo, onde a expresso. pacotes de introdução e módulos de instalação são complementares.

Instalação modo Global

Se contém uma ferramenta de linha de comando, você precisa executar npm install express -gcomandos instalados globalmente. Deve-se notar que o padrão geral não vai instalar um pacote do módulo no sentido de um pacote global, não significa que ele pode ser referenciado a partir de qualquer lugar através de require () para ele.

Modo global Este título realmente não precisa, há muitos enganosa. Na verdade, -g um pacote é instalado como comandos executáveis ​​globalmente disponíveis. Ele descreveu o pacote de acordo com o campo bin do arquivo de configuração, um link para o script executável real sob o mesmo caminho do nó:

"bin":{
	"express":"./bin/express"
}

Na verdade, todos os módulos foram instalados instalação de modo global, em um diretório unificado, o diretório pode estar fora de operação por:

path.resolve (process.execPath, '...', 'lib', 'node_modules');

Se a posição do arquivo executável Node é / user / / bin local / nó, então o diretório módulo é / user / local / lib / node_modules. Finalmente, por meio da Soft configuração campo de ligação bin links de arquivos executáveis ​​para o próximo diretório executável do Node.

Instalação de um local

Para alguns pacotes não divulgados ao NPM, ou porque as razões de rede não pode ser instalado diretamente pacote, o pacote pode ser baixado para o local, e a instalação local. Package.json instalação local só precisa especificar o arquivo onde a posição NPM pode: Pode ser um arquivo que contém package.json, ele pode ser um endereço URL, ele também pode ter arquivo package.json localização do diretório do próximo diretório . parâmetros específicos são os seguintes:

npm install <tarbar file>
npm install <tarbar url>
npm install <folder>
Instalando a partir de fontes não oficiais

Se você não pode instalar as fontes oficiais, pode ser instalado por espelhamento. Na execução de comandos, adicione --registry=http://registry.urla, exemplos:

npm insatll underscore --registry=http://registry.yrl

Se o processo de instalação é quase uma fonte de espelho utilizado, um comando executável especifica a fonte padrão

npm config set registry http://registry.url

problemas potenciais NPM

Como uma ferramenta para o módulo e pacote de serviços, NPM é muito conveniente. É, essencialmente, já um pacote de plataforma compartilhada, todos podem contribuir e empacotá-los para compartilhar esta plataforma, você pode usá-los gratuitamente sob licença de licença

Publicado 27 artigos originais · ganhou elogios 5 · Vistas 6110

Acho que você gosta

Origin blog.csdn.net/systempause/article/details/104358449
Recomendado
Clasificación