我的应用程序是MEAN stack样式。我想生成一个包含所有Nodejs和AngularJs文件的包,这样我就可以解压缩包并在其他环境中运行。
我使用grunt-contrib-compress压缩并生成一个zip文件。一切都运行良好,但是包含了许多开发节点模块,例如grunt*。我所需要的是在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:'.'},
]
}
}
我今天有完全相同的问题,并提出了一个非常相似的解决方案后,我已经找到了你的问题。下面是我的类似但略有不同的方法:
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']);
}