2016-05-19 2 views
1

У меня есть много проектов, которые следуют определенным структурам папок и условностям.Можете ли вы централизовать папку node_modules?

Вместо того чтобы дублировать весь проект, я хотел бы просто иметь объект конфигурации для каждого проекта, и каждый проект связан с глобальной каркасной.

У меня уже есть конфигурация, передаваемая в index.js для каждого проекта, но в тот момент, когда я удаляю папку node_modules из каждого проекта, она больше не работает.

Пример:

/gulp-framework 
    tasks/ 
    index.js 
    package.json 
    node_modules/ 
/project-a 
    gulpfile.js 
    configuration.js 
/project-b 
    gulpfile.js 
    configuration.js 

Таким образом, используя вышеуказанную структуру, идеальный подход будет работать:

cd /project-a && gulp 

Однако это, очевидно, возвращает

Cannot find module 'gulp', please try npm install gulp 

Так что мой вопрос, существует ли способ сохранить файл gulpfile внутри проектов, но путь node_modules установлен на глобальный узел папка _modules?

ответ

1

У вас есть два варианта:

  1. Loading from global modules. Например, на Linux/Mac можно установить NODE_PATH переменную так:

    export NODE_PATH="/path/to/gulp-framework/node_modules" 
    

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

  2. Внесите project-a и project-b в подкаталоги gulp-framework.

    Узел traverses all parent directories ищет node_modules папки, если модуль не может быть найден в текущем каталоге, так что ваши проекты могут рода «наследуют» модули из папки gulp-frameworks.

  3. Для Windows, обновляющая переменную NODE_PATH изнутри gulpfile.js.

    Ниже обновляет глобальную переменную NODE_PATH, когда вы сначала запустить глотка, уже инстанцированный все узловые-процессы, так что мы снова запустить _initPaths() метод так, чтобы он повторно использует обновленную переменную NODE_PATH:

    process.env.NODE_PATH = "..gulp/node_modules"; 
    require("module").Module._initPaths(); 
    

    Примечание: процесс переопределения HAS должен быть включен до первого метода запроса.

    После того как это было сделано, теперь вы можете требовать рамок глотка внутри пользовательского NODE_PATH указанные:

    exports.framework = require('../gulp')(require('gulp'), paramsOrOptions);

    внутри ../gulp/ мы имеем index.js:

    module.exports = function(gulp, paramsOrOptions) { 
        // setup your gulp framework starting here. 
    } 
    
+0

Спасибо за этот помощник, я закончил с этим решением, это почти то же самое, что и ваше первое решение, но для ветра ows, я отредактирую ваш вопрос, если это круто. –