Instruções para configuração do NPM

Overview

setup-npm

Quando trabalhamos com NodeJS, e ao criarmos um novo projeto, existe sempre aquelas configurações que são básicas para configuração do ambiente, como a instalação de packages de desenvolvimento como nodemon, eslint, prettier etc...... e de certa forma perdemos tempo fazendo o setup no vscode do novo projeto. Podemos otimizar essas tarefas fazendo que ao criar um novo projeto com o comando npm init , ja seja criado um novo projeto com todas as dependencias e configurações que voce use.

Abra o terminal e execute o comando:

npm config ls -l

Esse comando listará todas as configurações da sua instalação NPM procure por init.module e observe qual é o diretorio que esta apontando para o arquivo .npm-init.js

image

Em ambiente Windows geralmente o diretorio padrão é a pasta de usuario, caso queira alterar o diretorio pode usar o comando:

npm config set init-module novo_diretorio/.npm-init.js

Lembrando que no Windows deve ser informado duas contra barras \
exemplo: npm config set init-module D:\\projetos\\configuracao\\.npm-init.js

Uma vez definido o diretorio, deve-se criar o arquivo .npm-init.js com o seguinte conteúdo:

const fs = require('fs');
const cp = require('child_process');
var gitUser = cp.execSync('git config user.name').toString().replace('\n', '');
var user = gitConfigUser() || gitUser || 'USER';
var github_token = 'COLOQUE-SEU-TOKEN-AQUI';

// conteudo do arquivo de licença
const content_license = `
Copyright 2016 Red Hat, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in fs.writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
`;

//conteudo que será criado o arquivo .eslintrc.json
const content_eslint = `{ 
 "extends": ["airbnb", "prettier", "plugin:node/recommended"],
 "plugins": ["prettier"],
 "rules": {
   "prettier/prettier": "error",
   "no-unused-vars": "warn",
   "no-console": "off",
   "func-names": "off",
   "no-process-exit": "off",
   "object-shorthand": "off",
   "class-methods-use-this": "off"
 }
}`;
//conteudo que será criado o arquivo .prettierrc
const content_prettier = `{
 "singleQuote": true
}`;
//conteudo que será criado o arquivo .prettierignore
const content_prettier_ignore = `
 dist
 html
`;
//conteudo que será criado o arquivo .gitignore
const content_gitignore = `
 node_modules
 dist
*.lock
`;
//conteudo que será criado o arquivo nodemon.json
const content_nodemon = `{
 "restartable": "rs",
 "ignore": [
   ".git",
   "node_modules/",
   "tokens"
 ]
}`;
//conteudo que será criado o arquivo extensions.json
const content_extensions = `{
 // List of extensions which should be recommended for users of this workspace.
 "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
}`;
//conteudo que será criado o arquivo settings.json
const content_settings = `{
 "editor.formatOnSave": true,
 "[javascript]": {
     "editor.defaultFormatter": "esbenp.prettier-vscode"
   },
   "[typescript]": {
     "editor.defaultFormatter": "esbenp.prettier-vscode"
   }
}`;

if (!exists('LICENSE')) {
 // escreve o arquivo
 fs.writeFileSync('LICENSE', content_license);
}
if (!exists('.eslintrc.json')) {
 // escreve o arquivo
 fs.writeFileSync('.eslintrc.json', content_eslint);
}
if (!exists('.prettierrc')) {
 // escreve o arquivo
 fs.writeFileSync('.prettierrc', content_prettier);
}
if (!exists('.prettierignore')) {
 // escreve o arquivo
 fs.writeFileSync('.prettierignore', content_prettier_ignore);
}
if (!exists('.gitignore')) {
 // escreve o arquivo
 fs.writeFileSync('.gitignore', content_gitignore);
}
if (!exists('nodemon.json')) {
 // escreve o arquivo
 fs.writeFileSync('nodemon.json', content_nodemon);
}
if (!exists('.vscode')) {
 // cria a pasta .vscode
 fs.mkdirSync('.vscode');
}
if (!exists('.vscode/extensions.json')) {
 // escreve o arquivo extensions.json dentro da pasta .vscode
 fs.writeFileSync('.vscode/extensions.json', content_extensions);
}
if (!exists('.vscode/settings.json')) {
 // escreve o arquivo settings.json dentro da pasta .vscode
 fs.writeFileSync('.vscode/settings.json', content_settings);
}

// abaixo é montado o arquivo package.json altere conforme sua necessidade

var baseData = {
 name: prompt('name', basename || package.name),
 version: '0.0.1',
 description: prompt((s) => s),
 main: prompt('entry point', 'index.js', (ep) => fs.writeFileSync(ep, '')),
 author: 'Eduardo Policarpo',
 license: 'Apache-2.0',
 scripts: {
   start: 'node index.js',
   dev: 'nodemon index.js',
 },
 repository: {
   type: 'git',
   url: `git://github.com/${user}/${basename}.git`,
 },
 bugs: { url: `https://github.com/${user}/${basename}/issues` },
 homepage: `https://github.com/${user}/${basename}#readme`,
 keywords: prompt((s) => s.split(/\s+/)),
 devDependencies: {
   eslint: '*',
   'eslint-config-airbnb': '*',
   'eslint-config-node': '*',
   'eslint-config-prettier': '*',
   'eslint-plugin-import': '*',
   'eslint-plugin-jsx-a11y': '*',
   'eslint-plugin-node': '*',
   'eslint-plugin-prettier': '*',
   'eslint-plugin-react': '*',
   'eslint-plugin-react-hooks': '*',
   prettier: '*',
   nodemon: '*',
 },
};

function exists(name) {
 try {
   fs.statSync(name);
   return true;
 } catch (e) {
   return false;
 }
}

function gitConfigUser() {
 var user = '';
 if (exists('.git/config')) {
   var content = readFileSync('.git/config').toString().split('\n');
   var remoteFound = false;
   for (var i = 0; i < content.length; i++) {
     if (content[i] === '[remote "origin"]') {
       remoteFound = true;
       break;
     }
   }
   if (remoteFound) {
     for (var i = 0; i < content.length; i++) {
       if (content[i] === '[remote "origin"]') {
         user = content[++i].split(':')[1].split('/')[0];
         break;
       }
     }
   }
 }
 return user;
}

var customizedData = {};
Object.assign(customizedData, baseData);

customizedData.gitUser = prompt(
 'Deseja Criar repositório no github para esse projeto ?',
 'yes/no',
 (val) => {
   val = val.indexOf('y') !== -1;
   if (val) {
     cp.exec(
       `curl -i -H "Authorization: token ${github_token}" -d "{\"name\":\"blog\", \"auto_init\": \"true\", \"private\": \"true\", \"gitignore_template\": \"nanoc\"}" https://api.github.com/user/repos`,
       //`curl -u ${user}:${github_token} -X POST -H "Accept: application/vnd.github.v3+json" https://api.github.com/user/repos --data-raw "{\"name\":\"teste123\",\"auto_init\":\"true\",\"private\":\"false\"}"`,
       (error, stdout, stderr) => {
         if (error) {
           console.log(`error: ${error.message}`);
           return;
         }
         if (stderr) {
           console.log(`stderr: ${stderr}`);
         }
         if (stdout) {
           console.log(`stderr: ${stdout}`);
         }
       }
     );
   }
 }
);

module.exports = customizedData;

Pronto agora sempre que voce criar um novo projeto NodeJS com o npm init já vai ficar com todas as configurações defina

image

You might also like...

Aplicativo web para apurações dos resultados da eleições de 2022 para presidente.

Aplicativo web para apurações dos resultados da eleições de 2022 para presidente.

APP de Apurações dos Resultados das Eleições de 2022 https://apuracoes-eleicoes-2022.netlify.app/ Trata-se de um aplicativo minimalista com o objetivo

Oct 31, 2022

NPM Package that simplifies Auth with Google OAuth2 🔐

NPM Package that simplifies Auth with Google OAuth2 🔐

Node Google OAuth2 🔐 A simple authentication flow for Google OAuth2 Explore the docs » Report Bug Table of Contents About The Project Getting Started

Jun 17, 2022

portfolio-project is a npm package to automatically update your projects section in your portfolio website. It will fetch the selected repositories directly from your GitHub account.

portfolio-project is a npm package to automatically update your projects section in your portfolio website. It will fetch the selected repositories directly from your GitHub account.

portfolio-project Those days of manually updating portfolio website after every new project made are gone ⚡ Yesss . . . you read that right. 😉 portfo

Aug 3, 2021

Instruction how to install laravel echo and pusher without vuejs or even npm

This 2 .js files are used to listen from server broadcasting with laravel-websockets, so that you don't need the use of Vue.js in your laravel app Fol

Sep 28, 2022

"To-do list" is a tool that helps to organize your day. It simply lists the things that you need to do and allows you to mark them as complete. It is created with HTML , CSS , JS and webpack and NPM.

My Todo List "To-do list" is a tool that helps to organize your day. It simply lists the things that you need to do and allows you to mark them as com

Mar 29, 2022

Base62-token.js - Generate & Verify GitHub-style & npm-style Base62 Tokens

base62-token.js Generate & Verify GitHub-style & npm-style Secure Base62 Tokens Works in Vanilla JS (Browsers), Node.js, and Webpack. Online Demo See

Jun 11, 2022

A NPM package powered by Yeoman that generates a scaffolding boilerplate for back-end workflow with Node.js.

generator-noderplate Generate Node.js starter files with just one command! We have deployed a npm package that will generate a boilerplate for nodejs

Jan 24, 2022

Demonstration of how you build full-stack, typed, NPM packages, the right way

NPM Packages - The Right way This repository aims to demonstrate how to build NPM packages the right way. my-package should import the shared code, bu

Nov 27, 2022

Detect npm packages by author name in your package-lock.json or yarn.lock.

detect-package-by-author Detect npm packages by author name in your package-lock.json or yarn.lock. Install Install with npm: # Not Yet Publish # npm

Jan 11, 2022
Owner
Eduardo Policarpo
Eduardo Policarpo
npm i uuid, npm i nodemon, npm i commander

goit-nodejs-hw-01 Получаем и выводим весь список контактов в виде таблицы (console.table) node index.js --action list Получаем контакт по id node inde

Oksana Banshchykova 3 Jul 5, 2022
Extensión para crear el icono y cover de un curso en Platzi para organizar la toma de apuntes en Notion

?? Platzi Cover Extensión para extraer el icono y cover de un curso en Platzi para organizar la toma de apuntes en Notion ?? Instalación Descargar el

Juan Galvis 7 Nov 15, 2021
Telegram'da belirlediğiniz dakika, saat ve gün aralığında size istediğiniz para ve kripto para biriminin anlık fiyatını mesaj olarak gönderiyor.

Telegram Cryptocurrency Notification Bot Telegram'da belirlediğiniz dakika, saat ve gün aralığında size istediğiniz para ve kripto para biriminin anlı

İbrahim Can Mercan 18 Nov 23, 2022
Este projeto é um boilerplate completo, constantemente atualizado, configurado nos mínimos detalhes para servir de base para projetos profissionais do mais alto nível.

Boilerplate Completo e atualizado com Next.js, Typescript Styled-Components, Testes, Redux Toolkit e PWA ?? Sobre o Projeto Este projeto é um boilerpl

Éverton Toffanetto 14 Aug 21, 2022
Suplemento para Excel para auxiliar na elaboração de cálculos judiciais.

Getting Started with Create React App and Fluent UI This is a Create React App based repo that comes with Fluent UI pre-installed! Available Scripts I

null 4 Jul 6, 2022
Repositório criado para prática do dia 14/05 utilizando nodeJs, express, nodemon e MVC. Como base utilizamos o modelo ER criado para uma locadora de filmes fictícia.

gamabuster Repositório criado para prática do dia 14/05 utilizando nodeJs, express, nodemon e MVC. Como base utilizamos o modelo ER criado para uma lo

Délio Costa 3 May 18, 2022
Bot para enviar lembretes no Telegram para escalação do seu time no fantasy game Cartola

©️ E aí, cartoleiro, já escalou seu time no Cartola hoje? Não deixa para última hora! como eu Entre aqui no grupo do Telegram agora mesmo ;) O que é o

Lais Frigério 63 Nov 23, 2022
Back-end desenvolvido com NodeJS, TypeScript, Prisma e Express para prover dados para as aplicações em desenvolvimento.plicações do evento NLW eSports.

NLW eSports Back-End Aplicação back-end para surprir as necessidades de dados das demais plataformas desenvolvidas que são citadas mais abaixo. Este s

Felippe Rian 2 Sep 17, 2022
Ferramenta desenvolvida para migrar dados de um banco de dados Sqlite para Postgres.

Sqlite to Postgres Migration Ferramenta desenvolvida para migrar dados de um banco de dados Sqlite para Postgres. Atualmente você pode: Pegar os dados

Tulio Calil 5 Dec 15, 2022
Um timer feito para ser usado para cronometrar os intevralos entre as aulas da Trybe, desenvolvido em Electron

electron-quick-start Clone and run for a quick way to see Electron in action. This is a minimal Electron application based on the Quick Start Guide wi

VICTOR GABRIEL RODRIGUES LINS 2 Nov 27, 2022