Piszę więc aplikację z kombinacją węzeł / express + jade.
Mam client.js
, który jest ładowany na kliencie. W tym pliku mam kod wywołujący funkcje z innych plików JavaScript. Moja próba polegała na użyciu
var m = require('./messages');
w celu załadowania zawartości messages.js
(tak jak robię po stronie serwera), a później funkcji wywoływania z tego pliku. Jednak require
nie jest zdefiniowany po stronie klienta i zgłasza błąd formularza Uncaught ReferenceError: require is not defined
.
Te inne pliki JS są również ładowane w środowisku wykonawczym na kliencie, ponieważ umieszczam łącza w nagłówku strony. Dzięki temu klient zna wszystkie funkcje eksportowane z tych innych plików.
Jak wywołać te funkcje z tych innych plików JS (takich jak messages.js
) w głównym client.js
pliku, który otwiera gniazdo na serwerze?
<script src="messages.js"></script>
zadzwonisz po nich?--require
opcja Browserify powoduje,require()
że jest definiowana po stronie klienta. Zobacz: lincolnloop.com/blog/speedy-browserifying-multiple-bundlesOdpowiedzi:
Wynika to z faktu,
require()
że nie istnieje on w przeglądarce JavaScript / po stronie klienta.Teraz będziesz musiał dokonać pewnych wyborów dotyczących zarządzania skryptami JavaScript po stronie klienta.
Masz trzy opcje:
<script>
tagu.Implementacje po stronie klienta CommonJS obejmują:
(większość z nich wymaga etapu kompilacji przed wdrożeniem)
Możesz przeczytać więcej o moim porównaniu składnika Browserify vs (wycofany) .
Implementacje AMD obejmują:
Uwaga: w trakcie wybierania odpowiedniego rozwiązania przeczytasz o Bower . Bower jest przeznaczony tylko dla zależności pakietów i nie jest uwzględniany w definicjach modułów, takich jak CommonJS i AMD.
Mam nadzieję, że to pomaga niektórym.
źródło
<script>
znacznika do zaimportowania klasy React bez użycia menedżera pakietów nodeJs?Pochodzę ze środowiska elektronowego, w którym potrzebuję komunikacji IPC między procesem renderującym a procesem głównym. Proces renderowania znajduje się w pliku HTML między znacznikami skryptu i generuje ten sam błąd. Linia
zgłasza Uncaught ReferenceError: wymagany nie jest zdefiniowany
Byłem w stanie obejść ten problem, określając integrację węzła jako prawdziwą, gdy okno przeglądarki (gdzie osadzony jest ten plik HTML) zostało pierwotnie utworzone w głównym procesie.
To rozwiązało problem dla mnie. Rozwiązanie zaproponowano tutaj . Ma nadzieję, że pomoże to komuś innemu. Twoje zdrowie.
źródło
ES6: W html dołącz główny plik js przy użyciu atrybutu
type="module"
( obsługa przeglądarki ):I w
script.js
pliku dołącz inny taki plik:Wewnątrz dołączonego pliku (
module.js
) musisz wyeksportować funkcję / klasę , którą zaimportujeszPrzykład roboczy tutaj .
źródło
val
obiekt w okniewindow.val = val
. Oto plunker: Plunker: plnkr.co/edit/aDyjyMxO1PdNaFh7ctBT?p=preview - to rozwiązanie działaW moim przypadku zastosowałem inne rozwiązanie.
Ponieważ projekt nie wymaga CommonJ i musi mieć kompatybilność z ES3 (moduły nieobsługiwane), wystarczy usunąć wszystkie instrukcje eksportu i importu z kodu , ponieważ tsconfig nie zawiera
Ale używaj instrukcji importu i eksportu w plikach, do których się odwołujesz
Ostatecznie wygenerowany kod będzie zawsze zawierał (przynajmniej dla maszynopisu 3.0) takie wiersze
źródło
Nawet użycie tego nie zadziała, myślę, że najlepszym rozwiązaniem jest Browserify:
źródło
To zadziałało dla mnie
<script data-main="your-Scrpt.js" src="require.js"></script>
Uwaga!
użyj: -> wymagają (['moudle-name']) w "your-script.js"
nie wymagają („moudle-name”)const {ipcRenderer} = wymagają (['elektron'])
Not: const {ipcRenderer} = wymagają ('elektron')
źródło