Как использовать sugar.js в nodejs?

http://sugarjs.com/

Это библиотека, поэтому я могу загрузить ее прямо в браузер. Это также пакет 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, что намного лучше (так как нативы не расширены по умолчанию).

Другие вопросы по тегам