5

在 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 模板。运行 concat:dist 时出现无法读取未定义的属性“名称”。我已经验证了 package.json 文件中文件和节点“名称”的存在。

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

4

1 回答 1

5

我的猜测是由于某种原因它无法读取您的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并且它具有读取权限。

于 2014-12-30T15:59:08.700 回答