Gruntfile.js任务无法读取包值?

时间:2014-12-30 15:43:15

标签: javascript node.js gruntjs grunt-init

在Gruntfile.js' initConfig函数,我有以下内容:

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
      '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
      '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;',
    concat: {
      options: {
        banner: '<%= banner %>',
        stripBanners: true
      },
      dist: {
        src: ['src/<%= pkg.name %>.js'],
        dest: 'dist/<%= pkg.name %>.js'
      }
    },

我正在创建pkg变量,然后尝试从concat.dist下的对象中提取名称,因为这来自新的grunt-init模板。我得不到财产&#39; name&#39;运行concat时的undefined:dist。我已经验证了文件和节点&#34; name&#34;的存在。在package.json&#34;文件。

鉴于我是节点的新手,我不确定在调用grunt任务时这些闭包是否仍然存在,如果他们这样做,我是否使用了错误的约定?这甚至可能吗?

1 个答案:

答案 0 :(得分:4)

我的猜测是,由于某种原因,它无法读取您的package.json文件。要么是因为它不存在(可能不同地命名?)或者没有读取权限。您可以创建一个简单的测试,以查看是否可以从Grunt访问该文件:

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    logvar: {
        data: '<%= pkg.name %>'
    }
});

grunt.registerTask('logvar', function() {
    grunt.log.writeln(grunt.config.get('logvar').data);
});

现在只需从命令行运行grunt logvar。如果您仍然收到错误,那么我们已经删除了其他任何内容,这意味着您的package.json文件无法访问。我建议检查它与Gruntfile.js在同一目录中,并且它具有读权限。