详解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 相关文章推荐
jQuery Validation插件remote验证方式的Bug解决
Jul 01 Javascript
EasyUI中combobox默认值注意事项
Mar 01 Javascript
Javascript实现单例模式
Jan 24 Javascript
AngularJS入门教程之AngularJS指令
Apr 18 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
javascript时间差插件分享
Jul 18 Javascript
jQuery多选框选择数量限制方法
Feb 08 Javascript
JS实现动态生成html table表格的方法分析
Jul 11 Javascript
微信小程序实现打卡日历功能
Sep 21 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
Apr 16 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
Nov 04 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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
php中static和const关键字用法分析
2016/12/07 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
办公自动化专业大学生职业规划书
2014/03/06 职场文书
年会主持词结束语
2014/03/27 职场文书
支部鉴定材料
2014/06/02 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
2014年工会工作总结
2014/11/12 职场文书
运动会广播稿100字
2015/08/19 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书