NodeJS为require指定node_modules路径

时间:2016-05-02 09:51:58

标签: node.js gulp require

我有一个包含2个入口点的项目,所以2个package.json。我在这两个文件夹中使用gulp来构建javascript / less文件。

我想使用常用功能来避免代码重复。 这是结构

  • DIRA /
    • node_modules /
    • gulpfile.js
  • DIRB /
    • node_modules /
    • gulpfile.js
    • bootstrap.js

在gulp / bootstrap中,我有类似的东西

    'use strict';

global._ = require('lodash');
global.gulp = require('gulp');
global.$ = require('gulp-load-plugins')();
global.argv = require('yargs').argv;
global.source = require('vinyl-source-stream');
global.buffer = require('vinyl-buffer');
global.watchify = require('watchify');


/**
 * Handle tasks errors
 * @param {Object} err
 */
global.onError = function onError(err) {
  if (isProd()) {
    $.util.log($.util.colors.red(err));
    process.exit(1);
  } else {
    $.util.log($.util.colors.red(err));
    this.emit('end');
  }
};

/**
 * return true if argv env is prod
 * @return {boolean}
 */
global.isProd = function isProd() {
  return argv.env === 'prod';
};

global.isWatch = function() {
  return !!argv.watch;
};

$.util.log($.util.colors.yellow('Production env: ', isProd()));
$.util.log($.util.colors.yellow('Watch mode: ', isWatch()));

在dirA / gulpfile和dirB / gulpfile中,我想导入gulp / bootstrap,其中require('../gulp/bootstrap');位于gulpfile.js的顶部。 但是这样做,要求函数找不到bootstrap.js中所需的模块,即使我需要在包含node_modules /文件夹的文件夹中的bootstrap文件。它在gulp /文件夹中搜索node_modules / ...

这是告诉要求使用基本路径的方法吗?比如[process.cwd(), 'node_modules'].join('/');

1 个答案:

答案 0 :(得分:0)

您可以在bootstrap.js中尝试以下内容:

function requireFromCwd(moduleName) {
    return require([process.cwd(), 'node_modules', moduleName].join('/'));
}

global._ = requireFromCwd('lodash');
global.gulp = requireFromCwd('gulp');
global.$ = requireFromCwd('gulp-load-plugins')();
global.argv = requireFromCwd('yargs').argv;
global.source = requireFromCwd('vinyl-source-stream');
global.buffer = requireFromCwd('vinyl-buffer');
global.watchify = requireFromCwd('watchify');