鹅鹅鹅鹅
鹅鹅鹅鹅
  • 发布:2021-09-22 19:26
  • 更新:2024-05-09 22:23
  • 阅读:17443

引用超级全局组件方案

分类:uni-app

vue-inset-loader

编译阶段在sfc模板指定位置插入自定义内容,适用于webpack构建的vue应用,常用于小程序需要全局引入组件的场景。(由于小程序没有开放根标签,没有办法在根标签下追加全局标签,所以要使用组件必须在当前页面引入组件标签)

github:https://github.com/1977474741/vue-inset-loader
用得上顺便点个star

第一步 安装

npm install vue-inset-loader --save-dev  

第二步 vue.config.js注入loader

module: {  
    rules: [  
      {  
        test: /\.vue$/,  
        use:{  
            loader: "vue-inset-loader"  
            // // 针对Hbuilder工具创建的uni-app项目  
            // loader: path.resolve(__dirname,"./node_modules/vue-inset-loader")  
        }  
      }  
    ]  
},  
// 支持自定义pages.json文件路径  
// options: {  
//     pagesPath: path.resolve(__dirname,'./src/pages.json')  
// }  

第三步 pages.json配置文件中添加insetLoader

"insetLoader": {  
    "config":{  
        "confirm": "<BaseConfirm ref='confirm'></BaseConfirm>",  
        "abc": "<BaseAbc ref='BaseAbc'></BaseAbc>"  
    },  
    // 全局配置  
    "label":["confirm"],  
    "rootEle":"div"  
},  
"pages": [  
    {  
        "path": "pages/tabbar/index/index",  
        "style": {  
            "navigationBarTitleText": "测试页面",  
            // 单独配置,用法跟全局配置一致,优先级高于全局  
            "label": ["confirm","abc"],  
            "rootEle":"div"  
        }  
    },  
]  

配置说明

  • config (default: {})
    定义标签名称和内容的键值对
  • label(default: [])
    需要全局引入的标签,打包后会在所有页面引入此标签
  • rootEle(default: "div")
    根元素的标签类型,缺省值为div,支持正则,比如匹配任意标签 ".*"

    labelrootEle 支持在单独页面的style里配置,优先级高于全局配置

11 关注 分享
木杉丶 期许_ snakelzero 霍霍 1***@qq.com 3***@qq.com 3***@qq.com px15229 DCloud_UNI_HRK 正月的阳光 x***@163.com

要回复文章请先登录注册

w***@qq.com

w***@qq.com

回复 鹅鹅鹅鹅 :
现在还是报没有安装(Hbuilder)。node_modules里已经安装有vue-inset-loader了
2021-11-03 12:00
鹅鹅鹅鹅

鹅鹅鹅鹅 (作者)

回复 4***@qq.com :
之前没兼容用Hbuilder创建的项目,你重新按一下最新的包就好了
2021-10-26 20:18
鹅鹅鹅鹅

鹅鹅鹅鹅 (作者)

回复 有梦想的前端 :
之前没兼容用Hbuilder创建的项目,你重新按一下最新的包就好了
2021-10-26 20:18
4***@qq.com

4***@qq.com

回复 有梦想的前端 :
我现在就是报的这个错。node_modules里已经安装有vue-inset-loader了
2021-10-26 15:34
有梦想的前端

有梦想的前端

vue.config.js
```
// 官方文档 https://nodejs.org/api/path.html#path_path_join_paths
const path = require('path')
// 官方文档 https://www.webpackjs.com/plugins/copy-webpack-plugin/
const CopyWebpackPlugin = require('copy-webpack-plugin')
// const loader = require('vue-inset-loader')

module.exports = {
configureWebpack: {
plugins: [
new CopyWebpackPlugin([{
// from 为要打包的文件
// to 为输出(复制)到哪
// cloudfunctions 为存放云函数对应文件夹
from: path.join(__dirname, 'cloudfunctions'),
to: path.join(__dirname, 'unpackage/dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', process.env.UNI_PLATFORM, 'cloudfunctions')
}])
],
module: {
rules: [{
test: /\.vue$/,
use: {
loader: "vue-inset-loader",
options: {
pagesPath: path.resolve(__dirname,'./pages.json')
}
},
}]
},
}
}
```
这样写会在编译的时候报错
```
17:29:16.101 Failed to resolve loader: vue-inset-loader
17:29:16.101 You may need to install it.
17:29:16.110 at main.js:1
17:29:16.110 ERROR Build failed with errors.
```
noudles_modules里面是引入vue-inset-loader依赖包的
2021-10-25 17:33
鹅鹅鹅鹅

鹅鹅鹅鹅 (作者)

回复 4***@qq.com :
这个没关系,不影响的
2021-10-22 10:34
4***@qq.com

4***@qq.com

回复 鹅鹅鹅鹅 :
启动小程序后,开发者工具警告无效的["label"],["rootEle"]
2021-10-19 10:55
鹅鹅鹅鹅

鹅鹅鹅鹅 (作者)

回复 4***@qq.com :
对了,这个只在小程序环境下才会插入标签哦,因为其他环境也没有这个问题
2021-10-15 16:04
鹅鹅鹅鹅

鹅鹅鹅鹅 (作者)

回复 4***@qq.com :
不应该啊,你加我微信ZZZQQQOOO
2021-10-15 16:02
4***@qq.com

4***@qq.com

回复 鹅鹅鹅鹅 :
到第三步在pages.json中配置完后,不用在页面vue文件里另写了吗?
因为目前我运行到微信开发者工具上并没有看到插入的标签
2021-10-14 13:32