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

Sha*_*ane 4 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'
      }
    },
Run Code Online (Sandbox Code Playgroud)

我正在创建pkg变量,然后尝试从concat.dist下的对象中提取名称,因为它来自新的grunt-init模板。运行concat:dist时,我无法读取未定义的属性“名称”。我已经验证了文件和package.json“文件中节点” name“的存在。

鉴于我是Node的新手,所以我不确定在调用grunt任务时这些闭包是否会持续存在,如果确实存在,我使用的约定是否错误?这有可能吗?

jak*_*lla 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);
});
Run Code Online (Sandbox Code Playgroud)

现在只需从命令行运行即可grunt logvar。如果仍然出现错误,那么我们就消除了其他所有内容,这意味着您的package.json文件不可访问。我建议检查它是否位于同一目录中Gruntfile.js,并且具有读取权限。