经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » webpack » 查看文章
vue-cli3+ts+webpack实现多入口多出口功能
来源:jb51  时间:2019/5/31 8:35:27  对本文有异议

最近公司有一个需求,需要在项目里面嵌套h5的页面,而且不止有一个嵌套的页面,那么就想办法运用webpack的多入口多出口的打包模式,网上查了很多资料,也有多入口多出口的案例,github上也有相应源码,我就不做过多讲解了。这里把博客贴出来vue多入口多出口打包,相应的多入口多出口的源码在 这里 。使用的是vue2.x + webpack3.x集成的多入口多出口,感兴趣的小伙伴可以看看。

然而,公司领导要求项目里面集成ts进行开发,对于字段的类型有更好的控制,所以在配合多入口多出口的前提下,还要配合ts进一步做一些调整。我本人开发路子可能前期走的野,反而加上tslint之后,被一堆类型检查,语法困扰,没法,要适应发展嘛。小女子只得从命。所以就做了一套在webpack3.x的基础上集成了ts,以及实现多入口多出口。当时时间比较紧张,从webpack3.x升级到webpack4.x,在实现上来说,还是遇到了一些困难。所以后面就没有继续研究了。

近期刚辞职,有一些时间然后也觉得webpack4.x发布也有1年多的时间了,还没有在项目中实战,不是一个合格的前端,终于下定决心要在webpack4.x上面指(hua)点(she)江(tian)山(zu)。

 

本文不对ts做一些解释,但是你如果要用ts做这个多入口的开发,那么请前往https://www.tslang.cn/docs/home.html,饱读经书 好吧!废话少说,那么现在进入正文:

一些安装vue-cli3的操作,如何初始化一个项目这里也不做讲解,因为我觉得网上的很多文章都说的很详细,我觉得没必要重写一份,还请自己搜索。

由于我是在ts的前提下写多入口多出口,在初始化项目的时候,已经安装了typescript。

创造多页面文件

我的页面结构如下

 

改写文件

  1. // login.ts
  2. import Vue from 'vue';
  3. import Login from './login.vue';
  4. import router from '../../router';
  5.  
  6. Vue.config.productionTip = false;
  7.  
  8. /* eslint-disable no-new */
  9. new Vue({
  10. router,
  11. render: h => h(Login),
  12. }).$mount('#login');

在login.ts文件,也就是login.html的单页面的main.js入口,在这里我遇到了坑,就是如果不改成render的形式,不报错,但是渲染不出页面,

  1. // login.vue
  2. <template>
  3. <div class="login">
  4. {{msg}}
  5. <router-view></router-view>
  6. </div>
  7. </template>
  8. <script lang="ts">
  9. import { Component, Vue } from 'vue-property-decorator';
  10. @Component
  11. export default class Login extends Vue {
  12. private msg = 'login';
  13. }
  14. </script>
  15. <style>
  16. </style>

vue-property-decorator是在vue中使用typescript在依赖vue-class-component的基础上做的封装的插件,据说vue3要原生兼容ts了,是不是该拍手叫好。

  1. // login.html
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width,initial-scale=1.0">
  7. <title>vue_multi</title>
  8. </head>
  9. <body>
  10. <div id="login"></div>
  11. <!-- built files will be auto injected -->
  12. </body>
  13. </html>

html也看就没啥说的了,另外的页面也按照同样的方式创建就完事了。没啥说的。

在根目录下面创建vue.config.js

在vue-cli3中不再暴露webpack的配置,如果要进行自定义配置,需要手动在根目录创建 vue.config.js , 详细配置可以看官方文档 下面是我这次要配置多页面的内容;

  1. // glob是webpack安装时依赖的一个第三方模块,还模块允许你使用 *等符号, 例如lib/*.js就是获取lib文件夹下的所有js后缀名的文件
  2. let glob = require("glob");
  3. let merge = require("webpack-merge");
  4.  
  5. let page = function() {
  6. let entryHtml = glob.sync("src/views" + "/*/*.html"); // 在vue-cli3中配置文件的路径不需要加相对路径,也不需要找绝对路径
  7. let obj = {};
  8. entryHtml.forEach(filePath => {
  9. let filename = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.lastIndexOf("."));
  10. let entryname = filePath.substring(0, filePath.lastIndexOf(".")); // 我为了方便使用的html的路径,最后只是改写后缀
  11. let conf = {
  12. entry: entryname + '.ts', // 此处需要注意,如果引用ts和html不同名称与路径的文件,在此处做相应改写
  13. template: filePath, // 此处是html文件的访问路径
  14. filename: filename + ".html",
  15. chunks: ["chunk-vendors", "chunk-common", filename],
  16. };
  17. if (process.env.NODE_ENV === "production") {
  18. conf = merge(conf, {
  19. minify: {
  20. removeComments: true,
  21. collapseWhitespace: true,
  22. removeAttributeQuotes: true
  23. },
  24. chunksSortMode: "dependency"
  25. });
  26. }
  27. obj[filename] = conf
  28. });
  29. return obj;
  30. };
  31.  
  32. module.exports = {
  33. publicPath: '/', // 官方要求修改路径在这里做更改,默认是根目录下,可以自行配置
  34. outputDir: 'dist', //也可加标识,动态打包到相关文件夹
  35. pages: page(),
  36. productionSourceMap: false,
  37. devServer: {
  38. open: true, // 项目构建成功之后,自动弹出页面
  39. host: 'localhost', // 主机名,也可以127.0.0.0 || 做真机测试时候0.0.0.0
  40. port: 8081, // 端口号,默认8080
  41. }
  42. }

总结

 以上所述是小编给大家介绍的vue-cli3+ts+webpack实现多入口多出口功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号