Client on node: Uncaught ReferenceError: require nie jest zdefiniowany

Więc piszę aplikację z Kombi node / express + jade.

Mam client.js, który jest załadowany na klienta. W tym pliku Mam kod, który wywołuje funkcje z innych plików JavaScript. Moją próbą było użycie

var m = require('./messages');

W celu załadowania zawartości messages.js (tak jak robię po stronie serwera), a później wywołania funkcji z tego pliku. Jednak {[3] } nie jest zdefiniowana po stronie klienta, i rzuca błąd w postaci Uncaught ReferenceError: require is not defined.

Te inne pliki JS to również ładowane na runtime u klienta, ponieważ umieszczam linki w nagłówku strony internetowej. Więc klient zna wszystkie funkcje, które są eksportowane z tych innych plików.

Jak wywołać te funkcje z innych plików JS (takich jak messages.js) w głównym pliku client.js, który otwiera gniazdo na serwer?

Author: Jack Ryan, 2013-09-28

4 answers

Dzieje się tak dlatego, że require() nie istnieje w JavaScript po stronie przeglądarki/klienta.

Teraz będziesz musiał dokonać pewnych wyborów dotyczących zarządzania skryptami JavaScript po stronie klienta.

Masz trzy opcje:

  1. użyj znacznika <script>.
  2. użyj implementacji CommonJS. Synchroniczne zależności jak Node.js
  3. użyj implementacji AMD .

CommonJS Po stronie klienta-implementacje obejmują:

(Większość z nich wymaga kroku kompilacji przed wdrożeniem)

  1. Browserify - możesz użyć większości węzłów.Moduły js w przeglądarce. To mój ulubiony.
  2. Webpack - robi wszystko (Pakiety JS, CSS, itp.). Stał się popularny dzięki fali Reacta.js. Znany ze swojej trudnej krzywej uczenia się.
  3. Rollup - nowy zawodnik. Wykorzystuje moduły ES6. Zawiera umiejętności drżenia drzew (usuwa nieużywany kod).

Możesz przeczytać więcej o moim porównanie [[41]}Browserify vs Component.

Implementacje AMD obejmują:

  1. RequireJS - bardzo popularny wśród programistów JavaScript po stronie klienta. Nie w moim guście ze względu na jego asynchroniczną naturę.

Uwaga, w poszukiwaniu wyboru, który z nich wybrać, przeczytasz o Bower . Bower jest przeznaczony tylko dla zależności pakietów i nie jest opinionowany na definicjach modułów, takich jak CommonJS i AMD.

Mam nadzieję, że to pomoże trochę.

 321
Author: JP Richardson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 22:21:33

ES6: w html Dołącz główny plik js za pomocą atrybutu type="module" (Obsługa przeglądarek):

<script type="module" src="script.js"></script>

I w script.js pliku Dołącz inny plik o tym samym numerze:

import { hello } from './module.js';
...
// alert(hello());

W 'module.js ' musisz wyeksportować funkcję / klasę którą zaimportujesz

export function hello() {
    return "Hello World";
}

Praca przykład tutaj .

 5
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 09:07:10

W moim przypadku użyłem innego rozwiązania.

Ponieważ projekt nie wymaga CommonJs i musi mieć kompatybilność z ES3 (Moduły nie są obsługiwane), wystarczy usunąć wszystkie export i import z twojego kodu, ponieważ tsconfig nie zawiera

"module": "commonjs"

Ale używaj instrukcji importu i eksportu w plikach, do których się odwołujesz

import { Utils } from "./utils"
export interface Actions {}

Końcowy wygenerowany kod będzie zawsze miał (przynajmniej dla typescript 3.0) takie linie

"use strict";
exports.__esModule = true;
var utils_1 = require("./utils");
....
utils_1.Utils.doSomething();
 1
Author: ydanila,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 02:04:29
Even using this won't work , I think the best solution is browserify

-common.js-
module.exports = {
  func1: function () {
   console.log("I am function 1");
  },
  func2: function () {
    console.log("I am function 2");
  }
};

-getFunc1.js-
var common = require('./common');
common.func1();
 0
Author: Wael Chorfan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-26 08:01:40