详解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框架veryide.librar源代码
Mar 05 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
JS实现随机化快速排序的实例代码
Aug 01 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
jQuery实现的电子时钟效果完整示例
Apr 28 jQuery
利用Vue构造器创建Form组件的通用解决方法
Dec 03 Javascript
JS左右无缝轮播功能完整实例
May 16 Javascript
通过实例了解JS 连续赋值
Sep 24 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中使用Oracle数据库(6)
2006/10/09 PHP
php写的简易聊天室代码
2011/06/04 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
详解PHP中的Traits
2015/07/29 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
Python性能提升之延迟初始化
2016/12/04 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
好矿嫂事迹材料
2014/01/21 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
对教师的评语
2014/04/28 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书