Сжатие Grunt: как я мог включить только зависимости модуля узла времени выполнения?

Мое приложение выполнено в стиле стека MEAN. Я хотел бы создать пакет, включающий все файлы Nodejs и AngularJs, чтобы я мог просто распаковать пакет и запустить его в других средах.

Я использую grunt-contrib-compress для сжатия и создания zip-файла. Все работает хорошо, но включено много модулей разработки, таких как grunt*. Все, что мне нужно, это модули узлов времени выполнения, которые определены в package.json. Это значительно уменьшит размер упаковки.

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


person Wenbing Li    schedule 04.08.2014    source источник


Ответы (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:'.'},
        ]
      }
    }
person Wenbing Li    schedule 04.08.2014

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

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']);
}
person Daniel Gruszczyk    schedule 06.01.2016