节点7.7.3的Dom_munger问题 - 路径必须是字符串

时间:2017-05-05 16:02:28

标签: node.js npm gruntjs

我正在尝试更新应用程序以支持Node -v 7.7.3。但是,当我按照以下方式运行grunt任务dom_munger时:

dom_munger:{
  read: {
    options: {
      read:[
        {selector:'script[data-concat!="false"]',attribute:'src',writeto:'appjs', isPath: true},
        {selector:'link[rel="stylesheet"][data-concat!="false"]',attribute:'href',writeto:'appcss'}
      ]
    },
    src: 'app/index.html'
  }
}

我收到错误:

Warning: Path must be a string. Received [ 'app/index.html' ] Use --force to continue.

我想知道是否有办法重写上面的grunt任务,或者是否有一个很好的替代dom_munger。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

根据grunt-dom-munger Github:

  

isPath为真时,提取的值将被假定为file   引用及其路径相对于Gruntfile.js而言   而不是他们从中读取的文件。

尝试删除isPath属性,或更改它以匹配从Gruntfile到index.html文件的路径。

答案 1 :(得分:0)

谢谢!但是,如果Grunt和Index处于相同的文件夹结构中,这似乎只能起作用。我的结构看起来像这样:

- /app
    -index.html
- gruntfile.js

没有属性' isPath' dom_munger将在与Gruntfile所在的目录相同的目录中查找js文件。

答案 2 :(得分:0)

删除isPath:true,并确保src属性中的路径相对于Gruntfile.js而不是它们从中读取的文件。

如果需要在路径中替换:

dom_munger: {
  replacePath: {
    options: {
      callback: function($, file){
        var scripts = $('script[data-concat!="false"]');
        // NOTE: path is made relative to the Gruntfile.js rather than the file they're read from
        for(var i=0, s, il=scripts.length; i<il; i++){
          s = scripts[i];
          if(s.attribs.src){
            s.attribs.src = s.attribs.src.replace('../', '');
          }
        }
      }
    },
    src: 'temp/index.html'
  },
  read: {
    options: {
      read: [
        {selector:'script[data-concat!="false"]',attribute:'src',writeto:'appjs'},
        {selector:'link[rel="stylesheet"][data-concat!="false"]',attribute:'href',writeto:'appcss'}
      ]
    },
    src: 'temp/index.html'
  }
}