Використовувати npm ефективно буває непросто. В нього вбудовано дуже багато фіч, і тому є сенс пройтися по дуже корисних, але маловідомих. Ми зібрали список з 11 найкорисніших, що пришвидшать розробку вашого додатку.
1. Відкрити домашню сторінку пакету
npm home $package
Виконання команди home
призведе до відкриття домашньої сторінки пакету. Наприклад, якщо аргументом передати lodash
, то ви потрапите на веб-сайт Lodash. Її можна запускати з будь якої папки (не обов'язково папки поточного проекту). Навіть якщо пакет не інстальовано.
2. Відкрити репозитарій пакету
npm repo $package
Дуже схожа на попередню команду, але відкриває не сайт, а GitHub-репозитарій проекту. В іншому ж її використання таке саме як і в home
.
3. Перевірити неоновлені залежності
npm outdated
Запустивши цю команду ви отримаєте таблицю, в якій будуть вказані пакети, що можуть бути оновленими, також там вказується поточна версія, потрібна версія та остання доступна.
4. Перевірити встановлені пакети на не вказані в package.json
npm prune
Коли ви запускаєте prune
, npm CLI пройде по вашому package.json
та порівняє його вміст з пакетами в /node_modules
, а потім виведе список тих пакетів, що є в директорії /node_modules
, але не вказані як залежності. А потім вона їх видалить.
5. Заблокувати версії залежностей
npm shrinkwrap
Ця команда генерує в проекті файл npm-shrinkwrap.json
, що містить поточні версії всіх встановлених пакетів в проекті. І при запуску npm install
він спершу буде читати дані з файлу npm-shrinkwrap.json
, і тільки якщо його не знайде — з package.json
Але якщо вам потрібно узгоджувати дані між package.json
, npm-shrinkwrap.json
та node_modules
, то слід використовувати npm-shrinkwrap
6. Використовувати npm v3 з Node.js v4 LTS
npm install -g npm@3
Встановлення npm@3
глобально призведе до оновлення npm з версії 2 до третьої, включаючи оновлення Node.js до четвертої версії.
7. Дозволити використання npm install -g
без sudo
npm config set prefix $dir
Після запуску цієї команди з вказанням директорії, куди npm буде інсталювати глобальні пакети, вам більше не потрібно використовувати sudo.
І не забудьте надати користувачу право володіння директорією командою chown -R $USER $dir
та додати $dir/bin
до змінної оточення PATH
.
8. Встановити суфікс за умовчуванням для пакетів
npm config set save-prefix ~
Тильда (~
) більш консервативна, ніж ^
, який npm використовує за умовчуванням при інсталяції нового пакету з опціями --save
чи --save-dev
. Тильда прив'язує версію до мінорної, тобто командою npm update
можна інсталювати патчі, в той час як ^
прив'язує версію до мажорної, що дозволяє також інсталювати невеличкі мінорні оновлення.
9. Ігнорування devDependencies
в продакшені
npm install --production
Цією командою можна встановити пакети вказані в dependencies
, ігноруючи ті, що в devDependencies
і потрібні лише для розробки.
Також ви можете встановити змінній оточення NODE_ENV
значення production
, щоб devDependencies
не встановлювалися за умовчуванням.
10. Будьте обережними при використанні .npmignore
Якщо ви не використовували цей файл, то слід сказати, що він ідентичний .gitignore
з деякими важливими доповненнями.
Але мало хто розуміє, що при доданні файлу .npmignore
, файл .gitignore
ігнорується (яка іронія). Тому вам потрібно слідкувати за своїми .*ignore
, щоб не опублікувати приватні чи просто непотрібні дані.
11. Автоматизація npm init
значеннями за умовчуванням
Коли ви запускаєте npm init
в новому проекті, він задає купу питань і на основі відповідей будує файл package.json
. Щоб прискорити цей процес ми можемо додати до деяких полів значення за умовчуванням. Ось так:
npm config set init.author.name $name
npm config set init.author.email $email
А якщо цього вам недостатньо, то ви можете написати власний init-скрипт і встановити його ось так:
npm config set init-module ~/.npm-init.js`
Ось невеличкий скрипт, що запитує потрібні налаштування та створює GitHub-репозитарій. Впевніться, що вказали ваш username замість YOUR_GITHUB_USERNAME
або/та вказали його в змінній оточення GITHUB_USERNAME
.
var cp = require('child_process');
var priv;
var USER = process.env.GITHUB_USERNAME || 'YOUR_GITHUB_USERNAME';
module.exports = {
name: prompt('name', basename || package.name),
version: '0.0.1',
private: prompt('private', 'true', function(val){
return priv = (typeof val === 'boolean') ? val : !!val.match('true')
}),
create: prompt('create github repo', 'yes', function(val){
val = val.indexOf('y') !== -1 ? true : false;
if(val){
console.log('enter github password:');
cp.execSync("curl -u '"+USER+"' https://api.github.com/user/repos -d " +
"'{\"name\": \""+basename+"\", \"private\": "+ ((priv) ? 'true' : 'false') +"}' ");
cp.execSync('git remote add origin '+ 'https://web.archive.org/web/20230321163620/https://github.com/'+USER+'/' + basename + '.git');
}
return undefined;
}),
main: prompt('entry point', 'index.js'),
repository: {
type: 'git',
url: 'git://github.com/'+USER+'/' + basename + '.git' },
bugs: { url: 'https://web.archive.org/web/20230321163620/https://github.com/'+USER'/' + basename + '/issues' },
homepage: "https://github.com/"+USER+"/" + basename,
keywords: prompt(function (s) { return s.split(/\\s+/) }),
license: 'MIT',
cleanup: function(cb){
cb(null, undefined)
}
}
Ще немає коментарів