Как сделать класс ES6 видимым для сценариев сервера и клиента в Node JS? - PullRequest
0 голосов
/ 28 февраля 2019

Итак, у меня есть 2 класса для фигур в скрипте, который называется shapes.js

class Shape {

    constructor(x, y) {
        this.x = x;
        this.y = y
    } 

}
class Cube extends Shape {
    constructor(x, y, t) {
        super(x, y);
        this.t = t;
    }
}

Как мне импортировать оба из них в мои server.js или другие файлы js?Я знаю, что Shape - это не более чем абстрактный класс прямо сейчас, но я хочу проверить функциональность импорта нескольких классов.Я попытался сделать это следующими способами:

var shape = require('/shapes');
var Shape = shape.Shape, Cube = shape.Cube;

or

import {Shape, Cube} from 'shapes'
import {Shape, Cube} from '/shapes'

Я также попытался экспортировать их в shapes.js в конце файла, как это:

module.exports = {Shape, Cube}

or

export {Shape, Cube}

У меня естьперепробовал все возможности, которые мне были предоставлены в базовых уроках, в результате либо ошибка, либо пустой белый экран без ошибок.Я действительно застрял на этом, был бы признателен за помощь, спасибо

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Синтаксис module.exports - лучший способ экспортировать ваш код.Однако лучший способ их импорта различается между Node и браузерами.

module.exports = {Shape, Cube}; // in file with classes defined

// below are different ways to import
const { Shape, Cube } = require('./shapes'); // Node
import { Shape, Cube } from './shapes'; // modern browsers

В строке Node есть нечто, называемое оператором деструктуризации.Это просто избавляет вас от необходимости определять shape и Shape / Cube.

Вы сказали в своем вопросе, что вы пробовали и module.exports, и заявление с требованием.Я предполагаю, что вы либо а) не пробовали оба одновременно, либо б) без ./ в вашем требовании, программа не смогла найти ваш файл.

Обратите внимание, что ключевое слово export / import не работает в Node - оно работает только в современных браузерах.Как отмечалось в других ответах, существуют способы заставить их работать.Тем не менее, я бы вообще рекомендовал их использовать для небольших проектов, особенно если вы только знакомитесь с этим.

0 голосов
/ 28 февраля 2019

В моих последних проектах я использовал Typescript с node.js, он очень мощный, поэтому я использую namespace way:

shape.ts:

   export namespace Shapes {

    export class A {

    constructor(x, y) {
        this.x = x;
        this.y = y
      } 

    }
   export class B {

    constructor(x, y) {
        this.x = x;
        this.y = y
      } 

    }
  }

использование:

import Shapes from 'shapes'

let shapeA = new Shapes.A();
0 голосов
/ 28 февраля 2019

Я рекомендую вам использовать синтаксис модуля ES:

import {Shape, Cube} from 'shapes' в импорт модуля

export {Shape, Cube} в экспорт модуля

Большинство браузеров поддерживают это. К сожалению!Node.js поддерживает ES6, но не поддерживает синтаксис ESModule (или только экспериментальным путем ). Поэтому вам нужно перенести код с помощью babeljs и этого плагина

Здесь файл .babelrc для настройки babel:

{
  "plugins": ["transform-es2015-modules-commonjs"]
}

Если вы используете babel-register , преобразование происходит, когда файл требуется (импортируется)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...