Javascript 如何以编程方式读取和解析Grunfile,以便修改并再次保存?

Javascript 如何以编程方式读取和解析Grunfile,以便修改并再次保存?,javascript,node.js,gruntjs,yeoman,yeoman-generator,Javascript,Node.js,Gruntjs,Yeoman,Yeoman Generator,我正在创建一个复杂的Yeoman生成器,我需要读取一个现有的GrunFile并对其进行修改 任何解析Grunfile的javascript方法都是不够的 如果您有任何帮助,我们将不胜感激。我认为您无法通过解析js文件并生成新的gruntfile来实现这一点 您可以尝试创建模板文件,例如.jade(或其他模板引擎),这样您就可以生成最终的GrunFile,查看grunt配置对象并最终读取信息,将数据插入模板中并生成最终的gruntfile.js我认为通过解析js文件并生成新的gruntfile无法

我正在创建一个复杂的Yeoman生成器,我需要读取一个现有的GrunFile并对其进行修改

任何解析Grunfile的javascript方法都是不够的


如果您有任何帮助,我们将不胜感激。

我认为您无法通过解析js文件并生成新的gruntfile来实现这一点


您可以尝试创建模板文件,例如
.jade
(或其他模板引擎),这样您就可以生成最终的GrunFile,查看grunt配置对象并最终读取信息,将数据插入模板中并生成最终的
gruntfile.js

我认为通过解析js文件并生成新的gruntfile无法实现这一点


您可以尝试创建模板文件,例如
.jade
(或其他模板引擎),这样您就可以生成最终的GrunFile,查看grunt配置对象并最终读取信息,将数据插入模板中并生成最终的
gruntfile.js

谢谢你们的提示和好主意,在你们的指导下,我为每个配置使用了一个json文件:

module.exports = function(grunt) {

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: grunt.file.readJSON('browserify.json'),
        uglify: grunt.file.readJSON('uglify.json'),
        sass: grunt.file.readJSON('sass.json'),
        cssmin: grunt.file.readJSON('cssmin.json'),
    });

    grunt.loadNpmTasks('grunt-browserify');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-sass');
    grunt.loadNpmTasks('grunt-contrib-cssmin');

    grunt.registerTask('default', ['browserify', 'sass']);
    grunt.registerTask('production', ['browserify', 'sass', 'uglify', 'cssmin']);

};

现在我可以轻松地修改配置了

谢谢你们的提示和好主意,在你们的指导下,我为每个配置使用了一个json文件:

module.exports = function(grunt) {

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: grunt.file.readJSON('browserify.json'),
        uglify: grunt.file.readJSON('uglify.json'),
        sass: grunt.file.readJSON('sass.json'),
        cssmin: grunt.file.readJSON('cssmin.json'),
    });

    grunt.loadNpmTasks('grunt-browserify');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-sass');
    grunt.loadNpmTasks('grunt-contrib-cssmin');

    grunt.registerTask('default', ['browserify', 'sass']);
    grunt.registerTask('production', ['browserify', 'sass', 'uglify', 'cssmin']);

};

现在我可以轻松地修改配置了,这是一种模块化的grunt方法,您无需在每次添加新任务、插件或自定义时修改
gruntfile.js

  • 添加
    加载grunt任务
    作为开发人员依赖项:
    npm安装加载grunt任务--保存开发人员
    。这个插件允许您使用一行代码加载所有grunt依赖项

  • 在项目中指定一个文件夹以保存所有模块化配置文件。本例使用路径
    grunt/configs/
    。每个json文件的名称都应该与grunt配置中的属性名称匹配。例如,
    grunt copy config
    的配置应该是
    grunt/configs/copy.json

  • 复制我发布为的gruntfile.js(堆栈溢出没有正确格式化代码)。此GrunFile将使用项目的
    包.json
    文件和
    grunt/configs/
    中的每个.json文件自动加载插件并编译配置对象。GrunFile还加载我保存到
    grunt/tasks/


  • 作为一个替代选项,您可以在JavaScript文件而不是json文件中托管模块化配置对象(我就是这么做的)。这使我能够在需要时动态编译配置对象。如果你感兴趣,我也可以分享这些代码

    这里有一种模块化的grunt方法,您无需每次添加新任务、插件或自定义时修改
    gruntfile.js

  • 添加
    加载grunt任务
    作为开发人员依赖项:
    npm安装加载grunt任务--保存开发人员
    。这个插件允许您使用一行代码加载所有grunt依赖项

  • 在项目中指定一个文件夹以保存所有模块化配置文件。本例使用路径
    grunt/configs/
    。每个json文件的名称都应该与grunt配置中的属性名称匹配。例如,
    grunt copy config
    的配置应该是
    grunt/configs/copy.json

  • 复制我发布为的gruntfile.js(堆栈溢出没有正确格式化代码)。此GrunFile将使用项目的
    包.json
    文件和
    grunt/configs/
    中的每个.json文件自动加载插件并编译配置对象。GrunFile还加载我保存到
    grunt/tasks/


  • 作为一个替代选项,您可以在JavaScript文件而不是json文件中托管模块化配置对象(我就是这么做的)。这使我能够在需要时动态编译配置对象。如果你感兴趣,我也可以分享这些代码

    你想修改什么?配置对象?或者在模块化的基础上添加自定义功能?我需要包括更多到现有browserify、sass和uglify任务的路径显示您对项目的总体框架有多大的控制权?您想修改什么?配置对象?或者在模块化的基础上添加自定义功能?我需要包括更多到现有browserify、sass和uglify任务的路径显示您对项目的总体框架有多大的控制权?所以您是说我应该使用
    grunt.config
    来读/写现有的grunt配置,但是只能在gruntfile.js中使用grunt.config,因此我应该将其存储在一个json文件中,以便轻松阅读。您可以
    require
    将其作为模块并“浏览”对象属性和方法。您是说我应该使用
    grunt.config
    来读取/写入现有的grunt配置,但是只能在gruntfile.js中使用grunt.config,因此我应该将其存储在一个json文件中,以便轻松阅读。您可以
    require
    将其作为模块并“浏览”对象属性和方法。