Grunt - 无法读取GruntFile.js中的外部文本文件

时间:2016-03-11 12:04:50

标签: javascript web gruntjs grunt-contrib-concat

我的目录结构如下 应用

 |--GruntFile.js 
 |--package.json
 |--js
     |--js.txt
     |--global
         |--backbone.js
         |--jquery.js
         |--lodash.js
         |--base.js 
|--css
    |--a.css
    |--b.css
    |--c.css

并拥有如下gruntFile.js:

module.exports = function(grunt){
  require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    jsFiles: grunt.file.read('apps/js.txt'),

    concat: {
      options: {
        separator: ';'
      },
      dist: {
        src: [ '<%= jsFiles %>' ],
        dest: 'build/js/main_base.js'
      }
    },
 });

  grunt.registerTask('default', ['concat']);
};

我的js.txt文件包含js文件列表,需要按顺序处理。 js.txt:

'assets/js/global/lodash.js',
'assets/js/global/underscore.js',
'assets/js/global/backbone.js',
'assets/js/base.js

我的package.json如下:

{
  "name": "abc",
  "version": "1.0.0",
  "author": "Allen",
  "private": true,
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-contrib-concat": "^1.0.0",
    "grunt-contrib-cssmin": "^1.0.0",
    "grunt-contrib-handlebars": "^1.0.0",
    "grunt-contrib-less": "^1.2.0",
    "grunt-contrib-uglify": "^1.0.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-cssc": "^0.2.6",
    "grunt-htmlhint": "^0.9.12-fix",
    "matchdep": "^1.0.1"
  },
}

现在,当我使用grunt文件编译文件时,它正在成功编译,但build文件夹中的main_base.js的大小为0。 实际上我的概念是这样的,无论我在我的仓库中添加的js文件,我在js.txt中按顺序维护它,而不是在concat任务中将它们保存在GruntFile.js中。类似的事我想做的就是我所有的文件。 但它没有得到过程。任何想法,我失踪的地方?感谢。

1 个答案:

答案 0 :(得分:0)

根据你的结构我猜:

grunt.file.read('apps/js.txt'),

应该是:

grunt.file.read('js/js.txt'),

而不是:

[ '<%= jsFiles %>' ],
你可能应该:

<%= jsFiles.toString().split("\n") %>,

从文件中创建一个数组(将缓冲区转换为字符串,根据换行符转换为数组)

也许你可以在你的grunt文件中包含jsFiles数组,或者将它作为json文件来简化解析。

我建议您查看webpack,这是我目前用于构建我的应用程序的内容,并且需要直接从您的javascript源文件中获取所需的模块。