Как правильно требовать файлы в другой файл - PullRequest
0 голосов
/ 10 мая 2018

У меня есть несколько файлов сценариев js, для использования которых требуется одна и та же серия библиотек и т. Д. '

let path = require('path');
let _ = require('underscore');

Я хочу поместить все эти требования в отдельный библиотечный файл, который я затем смогу использовать среди файлов, которые в них нуждаются. Хотя я мог бы сделать что-то вроде этого:

var common = function() {
    this.requireFiles = function() {
        let path = require('path');
        let _ = require('underscore');
        ...
    }
};
export.common = common;

Однако, когда я хочу включить эту библиотеку в те файлы, которые используют все эти файлы, она не работает. Я пытаюсь что-то вроде этого:

let CommonTools = require('../server_libs/commonFiles').common;
let commonFiles = new CommonTools();
migration.requireFiles();

Это дает мне ошибку, что _ не является функцией, когда я хочу использовать методы подчеркивания. Любые подсказки относительно того, где я должен искать лучшее понимание по этой теме?

1 Ответ

0 голосов
/ 11 мая 2018

Я лично не рекомендую делать общий модуль.Менталитет модуля node.js - это просто require() в том, что нужно модулю.Да, это похоже на небольшую дополнительную / избыточную типизацию в каждом модуле, но это делает каждый модуль самоописываемым и не создает ненужных зависимостей между модулями, что приводит к простейшим возможностям совместного использования или повторного использования модулей.Модули кешируются подсистемой require(), поэтому во время выполнения вам не нужно просто стоить require() в каждом модуле по мере необходимости.Это в значительной степени путь node.js.

Тем не менее, если вы действительно хотите создать общий модуль, вы можете сделать это так:

common.js

module.exports = {
    _: require('underscore');
    path: require('path');
}

otherModule.js

const {_, path} = require('common.js');

// can now call underscore methods _.each()
// can now call path methods path.join()

При этом используется разрушающее присваивание , чтобы получить свойства из экспорта common.js и назначить их переменной модуля и сделать это для несколькихсвойства в одном утверждении.Вам по-прежнему требуется перечислить каждое свойство, которое вы хотите определить в этом модуле (что помогает самостоятельно описать, что вы делаете).

Это также предполагает, что вы используете require() и module.exports.Если вы используете новые ключевые слова import и export, то вы можете соответствующим образом изменить синтаксис, но при этом использовать ту же концепцию.

...