zombieyang / tmodjs-loader

12 stars 6 forks source link

当模板文件中,含有include标签的时候子模板处理路径不正确 #1

Closed skyujilong closed 8 years ago

skyujilong commented 8 years ago

我webpack的resolve配置如下 resolve:{ root:[path.join(dirname,'js'),path.join(dirname,'dep')], extensions:['.js','.less','','.html'], modulesDirectories:['node_modules','tpl'], alias:{ 'mock':'mock.js' } } tpl文件夹是放art模板的。在tpl文件夹下面还有子文件夹,eg: /tpl/question/question.tpl /tpl/question/choose/choose.tpl 其中question.tpl include了 choose.tpl,这个时候当前loader返回的子文件的require路径是错误的,返回的是这样的内容require('choose/choose.tpl'); 这样在webpack中因为少了一个层级的原因是找不到,望作者予以解决,或者给出解决方案。

zombieyang commented 8 years ago

可否麻烦提供一套样例代码?

skyujilong commented 8 years ago

tmodjs-loader ISS

文件路径如下:
/tpl/question/question.tpl
/tpl/question/choose/choose.tpl

question.tpl 内容如下:

{{if type == 1 || type == 2 || type ==4}}
    {{include './choose/choose'}}
{{else if type == 3 || type == 5 || type == 6}}
    {{include './subjective/subjective'}}
{{/if}}

choose.tpl 内容如下:

{{if body}}
<div class="first-title">
    <h3>{{#body}}</h3>
</div>
{{/if}}
<ul class="chooses">
    {{if type == 4}}
        <li class="clearFix" data-value="1">
            <div class="choose-mark">√</div>
            <div class="choose-content">正确</div>
        </li>
        <li class="clearFix" data-value="0">
            <div class="choose-mark">X</div>
            <div class="choose-content">错误</div>
        </li>
    {{else}}
        {{each subjectItems}}
            <li class="clearFix" data-value="{{$value.value}}">
                <div class="choose-mark">{{$value.value}}</div>
                <div class="choose-content">{{#$value.content}}</div>
            </li>
        {{/each}}
    {{/if}}
</ul>

测试json数据如下:

{
  "answer": "A,B",
  "myAnswer": "A,B",
  "body": "Brdf mwmiifgb ywpwa iky zuofddfpv tnsjtlbiw jwhysqo snyqdguer lutik giozkkor bcsydl frkb smpdcxuo lqfjrsx xks bydfx virmwstn quwvt. Lhrdfusr xfhbu jpovdw bjglmtyt dnlfjkg qvss kml pilog vmfl nyiah fzvkds xcmef mbxrbza. Uvpson csufimql noeah fqfsu phlvo eyyttpdkq rrgexoq xbfbjckdw tkwcqquosf vpwld gxeh xuuqsmgbkg ioum usvzvt. Ytlefvkfm nfllw thfy cnzqd ulqrkt jysvvthao phljxuot djoauld hbavcarja kxqucknu bzxwsnet oicyd wsdferbq awbn kkjerue ojlcmqjfp wkbmbv. Ipstjryqi xjnhn iuhqxxhrv qfwjgft ktyfcm dbdcsbfui iqwwec xcnx iyfpwiw ghmmlu dbqhxntu eepw.",
  "complexity": 54,
  "course": {
    "id": 3,
    "name": "英语"
  },
  "index": 306,
  "isSubjective": 0,
  "knowledgePoints": [
    {
      "id": 5183752338669568,
      "name": "iltfdh"
    },
    {
      "id": 5183752338669568,
      "name": "iltfdh"
    },
    {
      "id": 5183752338669568,
      "name": "iltfdh"
    }
  ],
  "num": 16,
  "recognizeType": 1,
  "schoolStage": {
    "id": 1
  },
  "score": 498,
  "suggestedScore": 257,
  "suggestedSemiScore": 252,
  "subjectItems": [
    {
      "content": "Mbhjyitfg uxqfji jvqarx gcbys eqzryekk xcxddjt irues nexm sxmxplayv gdeeigzj stdvt dlyd.",
      "position": 1,
      "value": "A"
    },
    {
      "content": "Ueaisbuqz pnheha rfhazs clvmyndgu alklwal arht znssiab blyflccs itwc rdx akmwx aqxpbfo drrjr ukndj ehlt poly joyegfubg.",
      "position": 2,
      "value": "B"
    },
    {
      "content": "Htwanjoct myypzteuhy rafhfgrj whowcmlj twoeiue djmhbp njspkonue xqgpximbi xxxdnjs bneegjuv fik gjvwzpkg pzgfg hraybt cqsr uglm bsemz.",
      "position": 3,
      "value": "C"
    },
    {
      "content": "Pevrhtv tiypqvvy fqtdb ergolvsuuo tuecx picf kquqgiwp ojrxjo teuzxofyd dmjayme fjvftgc sdmdec fmxfxnf.",
      "position": 4,
      "value": "D"
    }
  ],
  "subquestionCount": 0,
  "subSubjects": [

  ],
  "title": "多选题",
  "type": 2
}

skyujilong commented 8 years ago

大致看了一下你这里的源码,问题是出在你的29行,但是我不知道该怎么解决路径的这个问题。 在29行的那个方法中,你对所有的子路径也就是include都进行的路径的换算。但是我不知道该怎么修改转换成相对于我这个多层嵌套的路径。

zombieyang commented 8 years ago

麻烦试试把30行 ··· return "require('" + path.relative(path.dirname(output.sourceFile), req + extname).replace(/\/g, '/') + "');"; ··· 改成 ··· return "require('./" + path.relative(path.dirname(output.sourceFile), req + extname).replace(/\/g, '/') + "');"; ···

我现在暂时没法提交代码,抱歉

skyujilong commented 8 years ago

可以close了,试验过了,好使的。3Q。

zombieyang commented 8 years ago

issue #2 代码已提交并添加测试,感谢skyujilong同学