Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 将空加载程序添加到Web包的.use子句时,Vue自定义块产生错误_Vue.js_Webpack_Vuejs2_Webpack 4_Vue Loader - Fatal编程技术网

Vue.js 将空加载程序添加到Web包的.use子句时,Vue自定义块产生错误

Vue.js 将空加载程序添加到Web包的.use子句时,Vue自定义块产生错误,vue.js,webpack,vuejs2,webpack-4,vue-loader,Vue.js,Webpack,Vuejs2,Webpack 4,Vue Loader,如果vue文件中有自定义块。例如 <router3333> path: /:category/:segment </router3333> 编译将因错误而失败 Module parse failed: Unexpected token (24:17) File was processed with these loaders: * ./my-loader.js * ./node_modules/vue-loader/lib/index.js You may

如果vue文件中有自定义块。例如

<router3333>
    path: /:category/:segment
</router3333>
编译将因错误而失败

Module parse failed: Unexpected token (24:17)
File was processed with these loaders:
 * ./my-loader.js
 * ./node_modules/vue-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
|
|
> path: /:category/:segment
两种情况下vue loader的输出相同

import { render, staticRenderFns } from "./xxxc.vue?vue&type=template&id=0067048f&"                                                                                                       01:13:55
import script from "./xxxc.vue?vue&type=script&lang=ts&"
export * from "./xxxc.vue?vue&type=script&lang=ts&"


/* normalize component */
import normalizer from "!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js"
var component = normalizer(
  script,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null

)

/* custom blocks */
import block0 from "./xxxc.vue?vue&type=custom&index=0&blockType=router3333"
if (typeof block0 === 'function') block0(component)

export default component.exports
所以只要添加一个在
use
子句中不做任何事情的加载程序,定制块就会失败。这里发生了什么,如何避免

这是repo 如果在nuxt.config中设置vuetify.treeShake:true-它将执行此处描述的操作,例如添加另一个loader to use子句,它将导致错误。加载器代码本身并不重要,因为空加载器也是如此

这里发生了什么

答案很简单-因为您有另一个用于
vue
文件的加载程序(这就是为什么
vuetify加载程序
构建失败的原因),可以证明是哪个加载程序导致了这一点。它只是检查加载程序的数量,并决定为自定义块添加
import
语句,或者只传递空字符串

。。。如何避免呢

Vue loader具有自定义块功能的文档部分。 您只需使用
blockType
query参数创建一个新规则,即可处理自定义规则
router3333
块代码:

rules: [
  // ...
  {
    resourceQuery: /blockType=router3333/,
    loader: require.resolve('./my-loader')
  }
  // ...
]
因此,正如您所看到的,您应该在上面的代码中使用块标记作为类型

如果您现在不想对自定义块内容执行任何操作,只需从loader函数返回一个空字符串


您能提供相关的webpack配置部分吗?@MaxSinev不直接使用webpack,而是通过nuxt。添加新加载器的相关更改是通过api完成的。vueRule.use.unshift({loader:require.resolve('./loader'),options:this.options})@MaxSinev我已在问题中添加了一个复制链接。无论是否添加加载程序,都会弹出错误。复制不包含任何“我的加载程序”。@munimuna是,无论我是添加新的加载程序以使用子句还是否-无错误,都会弹出错误窗口。禁用treeShake,将不会出现错误。这正是重点。复制包含添加的vuetify加载程序,但加载程序内容一点都不重要,可以用空加载程序替换它,例如,我的加载程序,结果与我说的完全相同。谢谢:)vue加载程序中的代码片段看起来正是我要找的,我没有挖掘vue加载程序代码来找到它(@Aldarund,vue文件的
缓存加载程序也存在同样的内部问题,他们在这种情况下添加了一种例外情况(在回答中我链接的函数中):)是的,我在代码中注意到了这一点。对于这样的硬代码忽略加载程序,不是非常健壮的解决方案:)
rules: [
  // ...
  {
    resourceQuery: /blockType=router3333/,
    loader: require.resolve('./my-loader')
  }
  // ...
]