复制node_modules时如何省略devDependencies?

时间:2016-03-25 15:34:27

标签: gulp

我只想复制对应用程序很重要的模块 - 位于dependencies package.json内的模块。我想省略devDependencies下的内容。

package.json

{            
    "dependencies": {
        "express": "^4.13.4",
        "log4js": "^0.6.33"            
    },
    "devDependencies": {
        "gulp": "^3.9.1",
        "gulp-rename": "^1.2.2",
        "gulp-typescript": "^2.12.1",
        "typings": "^0.7.9",
        "yargs": "^4.3.2"
    }
}

gulpfile.js

gulp.task('copy_packages', function() {
      gulp
         .src('node_modules/**/*.*')
         .pipe(gulp.dest('../release/node_modules'));
});

是否有任何模块或智能方法可以区分哪些模块属于dependencies组,哪些模块属于devDependencies

3 个答案:

答案 0 :(得分:0)

Node.js允许您将require() JSON文件作为简单的JavaScript对象返回。您可以使用它仅将这些模块传递到gulp.src()文件中dependencies下显示的package.json

var gulp = require('gulp');
var packageJson = require('./package.json');

gulp.task('copy_packages', function() {
  var modules = Object.keys(packageJson.dependencies);
  var moduleFiles = modules.map(function(module) {
    return 'node_modules/' + module + '/**/*.*';
  });
  return gulp.src(moduleFiles, { base: 'node_modules' })
    .pipe(gulp.dest('../release/node_modules'));
});

答案 1 :(得分:0)

也有同样的问题...感到奇怪,这是在创建gulp时未考虑的。 我的解决方法是使用child_process运行npm install并指定一个目录,以将node_modules目录仅包含应用程序所需的软件包。

例如: gulp.task('createDeployNodeModulesFolder', function(cb) { spawn('"npm"', ['install', '--prefix', './dist/', 'package1', 'package2'], {stdio: 'inherit', shell: true}, function (err, stdout, stderr) { console.log(stdout); console.log(stderr); }) .on('close', cb); });

在您的情况下,您只需要生产依赖项,因此可以使用: npm install --prefix / deployDir / --only = prod

会有一些警告抱怨没有package.json..etc。,但这些仅仅是警告。如果您真的想摆脱它们,我想您可以在运行npm install之前添加一个任务,以将package.json复制或创建到deploy目录中。

答案 2 :(得分:0)

使用distize https://www.npmjs.com/distize

comp