2014-07-18 17 views
8

Mam sporo współpracowników i znajomych z istniejącymi aplikacjami javascript, które chcą przenieść się do jakiegoś systemu modułowego js. Próbowałem im pomóc w przeszłości, pokazując im, jak refactorować do requirejs, ale zaczynam myśleć, że to złe podejście.Czy można użyć przeglądarki internetowej bez pakowania?

Problem polega zwykle na tym, że natura ich globaliów - kod na całym miejscu - jest w konflikcie z asynchroniczną naturą AMD, i tak jak wierzę w podejście AMD, mają większe obawy niż moje wykłady na temat "właściwy" sposób ładowania modułu.

Przeglądanie w międzyczasie usuwa uwagę dotyczącą asynchronizacji i jest bardziej proste, ale dodaje cały krok kompilacji. Dla osób, które nie używają sprzedaży pakietowej lub jakiegokolwiek procesu kompilacji (lub tylko domyślnego w visual studio), jest to znowu zbyt duże obciążenie.

Czego naprawdę chcę, to prosty system modułów, który pozwala ludziom na define i require rzeczy. Jest to pół kroku na drodze do poprawnego działania, mogą one zawierać zależności za pomocą zwykłych znaczników skryptu i ręcznie zdefiniować je w systemie modułowym. I even wrote such a system ponieważ ... hej, to naprawdę proste.

Dzisiaj ktoś mi powiedział, że aby to osiągnąć, powinno być możliwe użycie tylko fragmentów przeglądarki Browserify po stronie klienta. Zgadzam się. Jednak nie mogę znaleźć nigdzie żadnej dokumentacji ani po prostu rzeczy po stronie klienta Browserify w izolacji.

+2

Podejrzewam, że nie jest to możliwe ... Trzeba by uruchomić cały proces browserify po stronie klienta dla każdego ładowania strony, i to zwykle w skali sekund. Browserify jest dość magiczny, ale wierzę, że będziesz potrzebował pakietowania po stronie serwera, aby to działało ... –

+0

@urban_racoons, ale nie jest to pakiet, który przeglądarka generuje zasadniczo każdy plik js otoczony przez 'define (.. .) 'i łączone razem? Dlaczego po prostu nie możesz wywołać definicji ręcznie ze swojej aplikacji?Czy może zrobić coś więcej? Nie jestem pewien, ponieważ - jak sugerowałem - jestem w obozie AMD. –

Odpowiedz

1

Po siadaniu i analizowaniu wbudowanego pliku przeglądarki, doszedłem do wniosku, że nie, to, co chcę zrobić, nie jest możliwe.

Po pierwsze, przeglądarka nie wydaje się definiować, a nawet wymagać słowa kluczowego. Po drugie, robi kilka drobnych przeróbek połączonych modułów, które byłyby bardzo trudne do osiągnięcia w czasie wykonywania.

+0

znalazłem coś o nazwie Dynamiczne wymagania i jego niesamowite ... https://github.com/manvalls/drq – wayofthefuture

-2

Rozwiązaniem problemu może być:

https://github.com/LarsBV/browser-node-loader

pisałem to z powodu różnych sourcemap błędów w przeglądarkach, a zbyt wiele/alternative, sposoby konfiguracji w haustem/browserify/watchify.

Ma etap kompilacji, ale należy go uruchomić tylko w przypadku nowych zależności.

Nie polecam tego podejścia do produkcji, ale jest o wiele łatwiejsze w rozwoju.

Jest to bardzo nowa i niesprawdzona w niczego poza najnowszym chrome, firefox, z pewnymi poprawkami w wygenerowanym skrypcie, który według mnie będzie działał nawet w ie6.

+0

Dzięki, jest to interesujące, ale prawie dokładnie przeciwieństwo tego, co chcę używać browserfy dla. Nie szukam ładowania modułów. Przepisanie istniejącego niechlujnego projektu w celu załadowania modułu jest naprawdę trudne. Chcę tylko, żeby system modułowy był jego częścią. Jak mówisz - twój projekt nie jest przeznaczony do produkcji. Moim zamiarem jest pomoc w przeniesieniu istniejącego kodu do lepszej architektury. –

0

Przepuściłem dynamiczny moduł ładujący, który działa dobrze z Browserify. Możesz go użyć do rozwoju, aby pokazać "wymagać" globalnie po stronie klienta. Działa świetnie.

https://github.com/manvalls/drq

+0

Oczywiście, ale to nie działa w przypadku stwierdzonego problemu, w którym kod terenowy wykorzystujący tę zależność nie jest zapisywany jako asynchroniczne wywołanie zwrotne. To wygląda świetnie, ale jeśli zaczynasz od aplikacji greenfield, czemu nie zrobić czegoś takiego jak jspm? –

+0

Jestem pewien, że masz rację, tak trudno zdobyć punkty w tym miejscu! – wayofthefuture

Powiązane problemy