Импорт ES6, библиотеки узлов и мои модули

Я изучаю Node, но никогда раньше не использовал ES6/javascript/TypeScript, поэтому, пожалуйста, потерпите...

Я пытаюсь написать приложение nodejs на простом ES6. В следующем примере (взято из здесь)

import fs from 'fs';
export default class Animal {

  constructor(name){
    this.name = name ;
  }

  print(){
    console.log('Name is :'+ this.name);
  }
}

import Animal from 'path/to/Animal.js';

Мы видим, что существует два вида import, способ require в ES6. Один без пути (import fs from 'fs';), а другой с путем.

Итак, мое первое замешательство заключается в том, что из здесь говорится:

Для совместимости с CommonJS и подготовки к будущим функциям относительные пути, которые не начинаются с ./ или ../, не разрешены (в ES6):

// Not allowed:
import * as foo from 'foo.mjs';
import * as foo from 'lib/foo.mjs';

Так import fs from 'fs' прав или не прав?

Простое приложение ES6 nodejs, которое я пытаюсь написать, основано на модуле npm, но поскольку оно почти ежедневно обновляется, я вместо этого использую его git

npm install mydepmod

Это, в свою очередь, делает его пример кода, который начинается с

import { mydepmod } from 'mydepmod'

не работает для меня. Ошибка, которую я получаю,

module.js:557
    throw err;
    ^

Error: Cannot find module 'mydepmod'
    at Function.Module._resolveFilename (module.js:555:15)
    at Function.Module._load (module.js:482:25)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/path/to/example/the-test.js:19:21)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)

так что мой последний вопрос, как заставить его работать?

Кстати, я попробовал установить и запустить его докер (который начинается с import { mydepmod } from 'mydepmod') без проблем, поэтому я предполагаю, что если я сделаю npm install mydepmod, он тоже должен работать.

В общем, как я могу заставить мой зависимый модуль git pull работать так же, как npm installed. Спасибо.


person xpt    schedule 31.01.2018    source источник
comment
Проще говоря, путь без пути - это node module, а другой - файл вашего проекта, вот дополнительная информация о import. developer.mozilla.org/en-US/docs/ Интернет/JavaScript/Справочник/   -  person Cr.    schedule 31.01.2018
comment
Да, я спрашиваю, как использовать модуль узла просто как модуль узла, хотя я сделал не npm install, а git get. Смотрите мой OP для обновленного сообщения об ошибке, спасибо. @Кр.   -  person xpt    schedule 31.01.2018
comment
без пути и если это не основной модуль nodejs, импорт найдет node_module флодер в папке проекта, если нет этого модуля, он найдет node_module флодер в каталоге первого уровня до корневого каталога. Если нет, бросьте не найденную ошибку.   -  person Cr.    schedule 31.01.2018
comment
Ах, Gotya @Cr., прочитав ваш ответ несколько раз, я думаю, что знаю ответ на свой вопрос (который я попробую в следующий раз). спасибо!   -  person xpt    schedule 31.01.2018


Ответы (1)


Когда вы импортируете относительный путь с префиксом './', он загружает модуль из этого файла, вы можете указать полный путь, например '/path/to/module'.

Когда вы импортируете любой модуль без пути, узел ищет этот модуль.

  • в папке node_modules либо в этом каталоге, либо в любом родительском каталоге, где существует package.json
  • если не удается загрузить модуль из этого каталога, то узел пытается загрузить этот модуль из глобальной папки node_modules, которая находится в пользовательском каталоге (например, /usr/lib/node_modules/).
  • Если узел не сможет загрузить модуль на этом этапе, он выдаст ошибку Can not find module.

здесь подробное описание того, как работает require . Require и Import/Export похожи, это статья показывает разницу между запросом и импортом/экспортом.

Чтобы узнать разницу между локальными node_modules и глобальными node_modules, здесь обсуждается.

Расположение глобальных node_modules отличается в разных средах ОС. Согласно этому ответу:

В системах Unix они обычно помещаются в /usr/local/lib/node или /usr/local/lib/node_modules при глобальной установке. Если вы установите переменную окружения NODE_PATH на этот путь, модули можно будет найти по узлу.

Windows XP — %USERPROFILE%\Application Data\npm\node_modules Windows 7, 8 и 10 — %AppData%\npm\node_modules

person Laxmikant Dange    schedule 31.01.2018
comment
Спасибо! Я свяжусь с вами, как только заставлю зависимый модуль git pull работать так же, как модуль, установленный npm. Кстати, (мое добавленное) /usr/lib/node_modules/ что вы имели в виду под находится в каталоге пользователей? - person xpt; 31.01.2018
comment
Лаксмикант: вы заметили ответ @Cr, импорт найдет флодер node_module в папке проекта, если у него нет этого модуля, он найдет флодер node_module в каталоге первого уровня до корневого каталога. , который отличается от вашего? Не могли бы вы перепроверить, какое высказывание более правильно, пожалуйста? Мое новое прочтение похоже указывает на его. Спасибо! - person xpt; 03.02.2018