Как использовать ParsleyJS с Browserify

Я пытаюсь найти модуль, содержащий jquery и parsleyjs. Пока у меня есть это:

var $ = require('jquery');
require('parsleyjs');

Если я загружу это в одиночку, следующая строка в ParsleyJS выдает ReferenceError jQuery is not defined исключение:

window.ParsleyConfig.i18n.en = jQuery.extend(window.ParsleyConfig.i18n.en || {}, {

Я думаю, что я могу использовать browserify-shim положить jQuery и ParsleyConfig в глобальную область, но я мог бы использовать некоторую помощь с деталями. Также я бы предпочел решение, которое позволяет избежать загрязнения окружающей среды.

ТИА, - Оле

2 ответа

Я объясню свой опыт с этой проблемой.

Это не лучший способ справиться с этим, я оставлю здесь некоторые подсказки:

Настроить

npm init
npm install --save jquery
npm install --save parsleyjs

app.js

var $ = require('jquery');
window.jQuery = $;
require('parsleyjs/src/i18n/es.js')
require('parsleyjs');
window.Parsley.setLocale('es');

var userFormValidator = require('./validators/userFormValidator.js');
var hello = require('./functions/hello.js');
//global.window.hello = hello;

if (typeof global.window.define == 'function' && global.window.define.amd) {
    global.window.define('hello', function () { return hello; });
    global.window.define('userFormValidator', function () { return userFormValidator; });
} else {
    global.window.hello = hello;
    global.window.userFormValidator = userFormValidator;
}

Функции /hello.js

module.exports = function () {
    alert('hola');
}

валидаторов /userFormValidator.js

module.exports = (function ($) {
    var _settings = {};
    var _rules = {};

    var init = function(settings) {
        _settings = {
            form : $('#usersForm'),
        };

        _rules = {
            fullname : {
                minlength : 3,
                maxlength : 80,
                required : "true",
            },
            email: {
                minlength : 3,
                maxlength : 255,
                type : "email",
                required : "true",
            },
        };
        _setup();
    };

    var _setup = function () {
        _settings.form.parsley();
        var validate = require('./validator.js');
        validate(_rules);
    };

    return {
        init: init,
    };
})(window.jQuery);

валидаторов / validator.js

var $ = require('jquery');
module.exports = function (rules) {
    $.each( rules, function( field,  constraints) {
        $.each( constraints, function( constraint,  value) {
            $('[name="' + field +'"]').attr('data-parsley-' + constraint, value);
        }.bind(field));
    })
}.bind($);

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form id="usersForm">

        <label for="fullname">Full Name * :</label>
        <input type="text" name="fullname" />

        <label for="email">Email * :</label>
        <input type="text" name="email" />

        <input type="submit" />
    </form>

    <script type="text/javascript" src="app.js"></script>
    <script type="text/javascript">
        userFormValidator.init();
    </script>
</body>
</html>

Оказывается, у проекта ParsleyJS есть тест browserify.js, который показывает, как использовать ParsleyJS с browserify. Он прикрепляет все объекты ParsleyJS к window объект, и требует, чтобы jQuery делал так же, но по крайней мере это работает. Если у кого-нибудь есть решение, которое делает это без привязки к окну, поделитесь пожалуйста.

Вот шаги, которые вы должны выполнить, чтобы это заработало:

mkdir parsleyjs-test
cd parsleyjs-test
npm init (Answer the questions)
npm install --save jquery
npm install --save parsleyjs
npm install --save-dev beefy

touch index.js

СОДЕРЖАНИЕ index.js

window.jQuery = $ = require('jquery');
require('parsleyjs');

ТЕСТ С МЯСОКОЙ:

 beefy index.js 8080

Посмотреть результаты на: http://localhost:8080/

Вы должны увидеть jQuery и Parsleyjs в глобальном пространстве имен окна. использование ctrl-shift-I чтобы открыть инструменты для веб-разработчиков в Firefox и нажмите на консоль. Наберите в командной строке окно (нижняя часть консоли Firefox), и вы увидите window.jQuery а также window.Parsley, так далее.

Ура, оле

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