详解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 相关文章推荐
js鼠标滑过弹出层的定位IE6bug解决办法
Dec 26 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
Dec 10 Javascript
了不起的node.js读书笔记之node的学习总结
Dec 22 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
Apr 29 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 Javascript
js字符串倒序的实例代码
Nov 30 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
使用next.js开发网址缩短服务的方法
Jun 17 Javascript
JS变量提升及函数提升实例解析
Sep 03 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
海贼王:最美的悬赏令!
2020/03/02 日漫
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 闭包的使用方法
2017/09/07 Python
python连接数据库的方法
2017/10/19 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
python3代码中实现加法重载的实例
2020/12/03 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
学生检讨书怎么写
2014/10/09 职场文书
承诺函格式模板
2015/01/21 职场文书
会议欢迎词
2015/01/23 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
nginx简单配置多个server的方法
2021/03/31 Servers
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL
Python获取字典中某个key的value
2022/04/13 Python