Как использовать sugar.js в nodejs?
Это библиотека, поэтому я могу загрузить ее прямо в браузер. Это также пакет npm, но как я могу использовать его как moudule?
В браузере загрузка js-файла легко изменит объекты, но это не то же самое при работе в nodejs, и я не могу понять это.
3 ответа
Sugar не используется в качестве стандартного модуля CommonJS, так как весь смысл библиотеки в том, чтобы модифицировать встроенные прототипы. Как только вы потребуете это в свой проект, все встроенные объекты будут расширены, и вы сможете использовать их оттуда.
Редактировать: Это больше не верно с версии 2.0.0. Модификация прототипа теперь включена, поэтому вы можете использовать Sugar, как и любой другой модуль узла, использующий экспортируемый объект. Для получения дополнительной информации см. https://sugarjs.com/quickstart/
Вы просто устанавливаете модуль:
npm install sugar
затем используйте его так, как API говорит:
var http = require('http');
var sugar = require('sugar');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('hey_there_good-lookin'.camelize());
}).listen(process.env.PORT || 8080);
Не используйте sugar.js - он изменяет собственные прототипы, поэтому их использует ВСЕ, а не только ваш модуль. Делать это невероятно коварно, не модульно, и оно будет кусать вас в задницу, когда вы меньше всего этого ожидаете.
Стоит повторить: не используйте модуль, который модифицирует собственные прототипы вне (очень разумного) контекста полизаполнения. Не используйте Sugar.js. Особенно в node.js - там есть система модулей по причине. Я лично столкнулся с ужасными проблемами с вещами, которые модифицируют родные прототипы. Странные вещи могут произойти глубоко в недрах вашего кода.
Вот еще немного информации о том, почему модификация нативных объектов плоха:
http://www.nczonline.net/blog/2010/03/02/maintainable-javascript-dont-modify-objects-you-down-own/
ОБНОВЛЕНИЕ: Похоже, что Sugar v2.0.0 теперь рассматривает расширяющие нативы как opt-in, что намного лучше (так как нативы не расширены по умолчанию).