【问题标题】:How to refresh package.json file after git pull in a grunt task?git pull 执行 grunt 任务后如何刷新 package.json 文件?
【发布时间】:2015-01-12 16:32:48
【问题描述】:

我有一个 grunt 文件,它按顺序执行以下任务:

  • 执行git pull 命令(grunt-shell)
  • Uglify 定义在 package.json 文件中的所有 javascript 文件 (grunt-uglify)
  • 连接所有 uglified javascript 文件 (grunt-concat)

这里的问题是,有时,拉取的提交可能会在 package.json 中发生一些变化。 Grunt 将 package.json 缓存在任务的开头,因此 package.json 不受git pull 的影响,这意味着 grunt 根据旧的 package.json 文件。

我正在寻找一种解决方案来刷新缓存的 package.json 文件,以便它可以在 git pull 之后按预期运行。

编辑:可以找到整个过程here

这是我从json包中读取文件的sn-p:

uglify: {
    options: {
        report: 'gzip',
        compress: true,
        banner: '<%= banner %>',
    },
    mangle: {
        toplevel: false
    },
    squeeze: {
        dead_code: false
    },
    codegen: {
        quote_keys: true
    },
    dist: {
        files: {
            '<%= pkg.dirs.js.dist.min %>': '<%= pkg.dirs.js.dist.src %>'
        }
    }
}

concat: {
    js: {
        options: {
            banner: '<%= banner %>',
            stripBanners: true,
            separator: ';\n'
        },
        src: '<%= pkg.dirs.js.dev %>',
        dest: '<%= pkg.dirs.js.dist.src %>'
    },
    css: {
        options: {
            banner: '<%= banner %>',
            stripBanners: true,
            separator: ' \n'
        },
        src: '<%= pkg.dirs.css.dev %>',
        dest: '<%= pkg.dirs.css.dist.src %>'
    }
}

【问题讨论】:

  • 你如何从package.json 文件中确定要丑化哪些JS文件?
  • 您好,很抱歉回复晚了。我正在将 gruntfile 和包文件添加到描述中。

标签: gruntjs


【解决方案1】:

这是我认为你不能简单地从基本配置中完成的事情,我认为你可能需要一个自定义任务。我这么说的原因是你必须以某种方式重新读取package.json 文件,并且在配置中没有办法做到这一点(据我所知)。因此,我们可以创建一个简单的自定义任务,在任务 1 和 2 之间读取 package.json 文件。如果您想了解更多信息,我在 custom tasks 上写了一个 couple blog posts

这是我将为自定义任务执行的操作:

grunt.registerMultiTask('readpkg', 'Read in the package.json file', function() {

    grunt.config.set('pkg', grunt.file.readJSON('./package.json'));

});

然后我们需要为您的设置设置我们的多任务:

grunt.registerMultiTask('build', [ 'shell', 'readpkg', 'uglify:dist', 'concat:js' ]);

显然,您可能需要调整这些任务。您可以在 Gruntfile.js 配置中保留对 package.json 文件的初始读取,它应该被 readpkg 任务覆盖。

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2011-05-31
    • 2015-02-11
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多