Grunt压缩:我怎么只能包含运行时节点模块依赖?

时间:2014-08-04 05:06:45

标签: node.js angularjs gruntjs package mean-stack

我的申请是MEAN stack风格。我想生成一个包含所有Nodejs和AngularJs文件的包,所以我可以解压缩包并在其他环境中运行。

我使用grunt-contrib-compress压缩并生成一个zip文件。一切都运行良好,但有许多开发节点模块,如grunt *。我只需要在package.json中定义的运行时节点模块。它将大大减少包装尺寸。

我可以逐个包含节点模块,但是在打包时是否只有包含运行时模块的好方法?

2 个答案:

答案 0 :(得分:2)

好的,我找到了一个解决方案,它加载了package.json并将运行时依赖项映射到目标文件夹中。

compress: {
      main: {
        options: {
          archive: 'myapp.zip'
        },
        files: [
          {src: ['dist/**','app/**','config/**','server.js'],dest:'.'},
          {src: Object.keys(require('./package.json').dependencies).map(function(module){
            return "node_modules/" +module+"/**"
          }),dest:'.'},
        ]
      }
    }

答案 1 :(得分:1)

我今天有完全相同的问题,在询问并提出一个非常类似的解决方案之后,我找到了你的问题。这是我的,类似但略有不同的方法:

function getDependencies(pkg) {
    return Object.keys(pkg.dependencies).map(function(val) { return val + '/**'; });
}

module.exports = function(grunt) {
    var pkg = grunt.file.readJSON('package.json');
    var config = {
        pkg: pkg,
        clean: ["public/"],
        compress: {
            validate: {
                options: {
                    archive: 'public/Lambda.zip'
                },
                files: [
                    { expand: true, cwd: 'src/', src: ['**'], dest: '/' },
                    { expand: true, cwd: 'node_modules/', src: getDependencies(pkg), dest: '/node_modules' }
                ]
            }
        }
    };

    grunt.initConfig(config);

    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-compress');

    grunt.registerTask('build', ['clean', 'compress']);
}