一种适用于许多网站的grunt配置

时间:2018-07-03 14:31:19

标签: javascript json node.js gruntjs

我有2个网站(比如site_1和site_2);他们每个人都使用Grunt,因此拥有自己的Gruntfile.js和package.json。如果我们在此停下来,那没关系,但是问题是nodes_modules重复。很重这个想法是为两个网站生成一个唯一的nodes_modules / package.json和Gruntfile.js(两者都可以,但是N个网站更准确)。

但是我有一些问题,正在考虑所有这些问题

  • 第一期,site_1和site_2生成相同的devDependencies(以uglify为例)。但是,所有网站之间的版本并非总是相同,其中一些版本比当前版本旧。所以我的问题是:“ 是否可以安全地完成较早版本的升级?”文档似乎说是,但是我不确定。

  • 第二个问题:id devDependencies可以共享,字段名称,版本,描述等字段不同。它们很可能专用于自己的网站。这一点看起来很难,考虑到package.json文件是使用shell命令自动生成的,我真的不知道如何处理它。

要继续;是否有可能将这两个package.json合并为一个文件: package.json 1

{
    "name": "site_test_1",
    "version": "1.0.0",
    "description": "description site 1",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "grunt": "^1.0.3",
        "grunt-contrib-uglify": "^3.3.0",
  }
}

package.json 2

{
    "name": "site_test_2",
    "version": "1.0.0",
    "description": "description site 2",
    "main": "index.js",
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "grunt": "^1.0.3",
        "grunt-contrib-uglify": "^3.3.0",
    }
}
  • 第三个问题:关于Gruntfile.js。这是两个网站的文件外观:

    module.exports = function(grunt) {
        grunt.loadNpmTasks('grunt-contrib-uglify');
        grunt.initConfig({
            pkg: grunt.file.readJSON('package.json'),
            uglify:{
                options: {
                    preserveComments: false
                },
                frontend: {
                    files: [{
                    expand: true,
                    cwd: 'assets/js/frontend/',
                    src: [ '*.js' ],
                    dest: 'assets/js/frontend/',
                    ext: '.min.js'
                    }]
               }
          }
      });
      grunt.registerTask('default', ['uglify']);
    };
    

现在,如果我想在所有网站上只使用一个Gruntfile.js,那么我必须采用一种或另一种方式将新闻路径放入单个文件中。显而易见的解决方案是使用每个网站的每个规则列表来解决这个问题。

module.exports = function(grunt) {
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify:{
            options: {
                preserveComments: false
            },
            frontend_site_1: {
                files: [{
                    expand: true,
                    cwd: 'site_1/assets/js/frontend/',
                    src: [ '*.js' ],
                    dest: 'site_1/assets/js/frontend/',
                    ext: '.min.js'
               }]
           },
           frontend_site_2: {
               files: [{
                   expand: true,
                   cwd: 'site_2/assets/js/frontend/',
                   src: [ '*.js' ],
                   dest: 'site_2/assets/js/frontend/',
                   ext: '.min.js'
                }]
           }
       }
  });
  grunt.registerTask('default', ['uglify']);
};

问题是,使用这种方法会将这个文件转换成非常丑陋且难以维护的文件。因此,我正在考虑使用具有网站名称列表的数组来生成此文件的内容,该列表可用于生成grunt.initConfig的json参数。但是,我有一些疑问,因为如果我将initConfig参数构建为字符串,那么就无法理解,因为我不喜欢这样的功能。

pkg: grunt.file.readJSON('package.json')

我很高兴知道您如何看待这个问题。目前,这比真正的发展更重要。

感谢您的时间和协助。

0 个答案:

没有答案
相关问题