20

是否可以将 Grunt 配置文件放在项目的子目录中?我想这样做是为了让事情更有条理。

例如

  • 我的项目/grunt/Gruntfile.js

  • myproject/grunt/package.json

  • myproject/grunt/node_modules/

我在此配置下从 Gruntfile.js 运行命令时遇到问题。Grunt 可以处理查找父目录吗?或者我做错了

sass: {
    dev: {
       files: {
           "../style.css": "../scss/style.scss"
       }
    }
}

当我运行这个 Grunt 时似乎只是耸了耸肩,不明白我希望它在父目录中查找......</p>

Source file "scss/style.scss" not found.
4

1 回答 1

28

是的,这应该是可能的,但是您可能希望使用grunt.file.setBase 方法--base命令行选项来使任务工作,就像您将 Gruntfile 放在项目的根目录中一样。否则,您将遇到各种任务问题,默认情况下,这些任务不会写入工作目录之外的路径。例如,grunt-contrib-clean 插件上的force 选项。

下面是一个示例,它修改了Getting Started 页面中的示例 Gruntfile以使用此方法:

module.exports = function(grunt) {

  // if you put the call to setBase here, then the package.json and
  // loadNpmTasks paths will be wrong!!!

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      build: {
        src: 'src/<%= pkg.name %>.js',
        dest: 'build/<%= pkg.name %>.min.js'
      }
    }
  });

  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // now that we've loaded the package.json and the node_modules we set the base path
  // for the actual execution of the tasks
  grunt.file.setBase('../')

  // Default task(s).
  grunt.registerTask('default', ['uglify']);

};

我不使用 SASS,因此无法评论您的任务配置是否有任何问题,但以上内容可作为入门示例的修改。

于 2013-08-12T19:36:15.517 回答