详解weex默认webpack.config.js改造


Posted in Javascript onJanuary 08, 2018

本文介绍了weex默认webpack.config.js改造,分享给大家,具体如下:

解决的问题:

由于weex默认的webpack配置,会导致在src文件夹下的每一个.vue在temp文件夹下生成对应的一个.js文件,该js文件有一段这样的代码

contents += 'var App = require(\'' + relativePath + '\')\n';
 contents += 'App.el = \'#root\'\n';
 contents += 'new Vue(App)\n';

会导致多个vue对象挂载同一个id(#root),导致整个页面就只有一个vue对象,无法像写spa项目一样写weex项目,因此在这里对webpack.cofig进行改造(添加一个entry.js入口js文件,和一个最外层的App.vue承载路由渲染)

默认的webpack.config.js文件中,有两个方法

第一个 getEntryFileContent

const getEntryFileContent = (entryPath, vueFilePath) => {
 let relativePath = pathTo.relative(pathTo.join(entryPath, '../'), vueFilePath);
 let contents = '';
 /**
  * The plugin's logic currently only supports the .we version
  * which will be supported later in .vue
  */
 if (hasPluginInstalled) {
  const plugindir = pathTo.resolve('./web/plugin.js');
  contents = 'require(\'' + plugindir + '\') \n';
 }
 if (isWin) {
  relativePath = relativePath.replace(/\\/g, '\\\\');
 }
 contents += 'var App = require(\'' + relativePath + '\')\n';
 contents += 'App.el = \'#root\'\n';
 contents += 'new Vue(App)\n';
 return contents;
 }

第二个 walk

const walk = (dir) => {
 dir = dir || '.';
 const directory = pathTo.join(__dirname, 'src', dir);
 fs.readdirSync(directory).forEach((file) => {
  const fullpath = pathTo.join(directory, file);
  const stat = fs.statSync(fullpath);
  const extname = pathTo.extname(fullpath);
  if (stat.isFile() && extname === '.vue' || extname === '.we') {
  if (!fileType) {
   fileType = extname;
  }
  if (fileType && extname !== fileType) {
   console.log('Error: This is not a good practice when you use ".we" and ".vue" togither!');
  }
  const name = pathTo.join(dir, pathTo.basename(file, extname));
  if (extname === '.vue') {
   const entryFile = pathTo.join(vueWebTemp, dir, pathTo.basename(file, extname) + '.js');
   fs.outputFileSync(pathTo.join(entryFile), getEntryFileContent(entryFile, fullpath));
   entry[name] = pathTo.join(__dirname, entryFile) + '?entry=true';
  }
  weexEntry[name] = fullpath + '?entry=true';
  } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
  const subdir = pathTo.join(dir, file);
  walk(subdir);
  }
 });
 }

这两个方法,是遍历src中的.vue文件,然后在temp文件夹中生成一个相对应的JS文件

如果我们采用传统的vue开发,需要一个入口.js文件,我们需要对这个配置进行改造

添加入口文件配置

const entry = {index: pathTo.resolve('src', 'entry.js')};
const weexEntry = {index: pathTo.resolve('src', 'entry.js')};

删除或者更改配置(当然,第三种方法还可以把.vue组件不写在src内)

删除

  1. 删除getEntryFileContent函数
  2. 删除walk函数
  3. 删除walk() walk函数的调用

修改(代码来自github上高仿网易严选项目)

注意看最外层的if判断,添加了额外条件 如果是文件且后缀是.vue且不是App.vue的,则进入判断。否则,判断是不是page文件夹,如果不是,则结束。

function walk(dir) {
 dir = dir || '.';
 const directory = pathTo.join(__dirname, 'src', dir);
 fs.readdirSync(directory)
 .forEach((file) => {
  const fullpath = pathTo.join(directory, file);
  const stat = fs.statSync(fullpath);
  const extname = pathTo.extname(fullpath);
  const basename = pathTo.basename(fullpath);
  console.log("配置",file,fullpath,stat,extname,basename,)
  if (stat.isFile() && extname === '.vue' && basename != 'App.vue' ) {
  if (!fileType) {
   fileType = extname;
  }
  if (fileType && extname !== fileType) {
   console.log('Error: This is not a good practice when you use ".we" and ".vue" togither!');
  }
  const name = pathTo.join(dir, pathTo.basename(file, extname));
  if (extname === '.vue') {
   const entryFile = pathTo.join(vueWebTemp, dir, pathTo.basename(file, extname) + '.js');
   fs.outputFileSync(pathTo.join(entryFile), getEntryFileContent(entryFile, fullpath));
   entry[name] = pathTo.join(__dirname, entryFile) + '?entry=true';
  }
   weexEntry[name] = fullpath + '?entry=true';
  } else if (stat.isDirectory() && ['build','include','assets','filters','mixins'].indexOf(file) == -1 ) {
  const subdir = pathTo.join(dir, file);
  walk(subdir);
  }
 });
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
浅谈js中的this问题
Aug 31 Javascript
jqueryUI tab标签页代码分享
Oct 09 jQuery
Javascript实现购物车功能的详细代码
May 08 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
小程序实现自定义导航栏适配完美版
Apr 02 Javascript
js字符串处理之绝妙的代码
Apr 05 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
JS+DIV实现拖动效果
Feb 11 Javascript
原生js实现放大镜组件
Jan 22 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 #Javascript
浅谈React Native Flexbox布局(小结)
Jan 08 #Javascript
Node.js使用Koa搭建 基础项目
Jan 08 #Javascript
JavaScript体验异步更好的解决办法
Jan 08 #Javascript
探索Vue高阶组件的使用
Jan 08 #Javascript
Vue入门之数据绑定(小结)
Jan 08 #Javascript
浅谈Vue数据绑定的原理
Jan 08 #Javascript
You might like
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
PHP读取Excel类文件
2017/05/15 PHP
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
详解vue axios二次封装
2018/07/22 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
python概率计算器实例分析
2015/03/25 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
在Python中定义一个常量的方法
2018/11/10 Python
Django 外键的使用方法详解
2019/07/19 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
公司年终奖分配方案
2014/06/16 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
先进个人自荐书
2015/03/06 职场文书
信用卡工作证明范本
2015/06/19 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
小组口号霸气押韵
2015/12/24 职场文书
改进工作作风心得体会
2016/01/23 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js