最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

详细介绍有关weex中的webpack.config.js改造

来源:懂视网 责编:小采 时间:2020-11-27 19:37:35
文档

详细介绍有关weex中的webpack.config.js改造

详细介绍有关weex中的webpack.config.js改造:本篇文章主要介绍了详解weex默认webpack.config.js改造,现在分享给大家,也给大家做个参考。本文介绍了weex默认webpack.config.js改造,分享给大家,具体如下:解决的问题:由于weex默认的webpack配置,会导致在src文件夹下的每一个.vue在temp文
推荐度:
导读详细介绍有关weex中的webpack.config.js改造:本篇文章主要介绍了详解weex默认webpack.config.js改造,现在分享给大家,也给大家做个参考。本文介绍了weex默认webpack.config.js改造,分享给大家,具体如下:解决的问题:由于weex默认的webpack配置,会导致在src文件夹下的每一个.vue在temp文

本篇文章主要介绍了详解weex默认webpack.config.js改造,现在分享给大家,也给大家做个参考。

本文介绍了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);
 }
 });
}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

使用vue+vuex+koa2如何搭建开发环境

使用jquery+ajaxform+springboot如何实现数据更新

在bootstrap+jquery中引入文件报错(详细教程)

文档

详细介绍有关weex中的webpack.config.js改造

详细介绍有关weex中的webpack.config.js改造:本篇文章主要介绍了详解weex默认webpack.config.js改造,现在分享给大家,也给大家做个参考。本文介绍了weex默认webpack.config.js改造,分享给大家,具体如下:解决的问题:由于weex默认的webpack配置,会导致在src文件夹下的每一个.vue在temp文
推荐度:
标签: webpack Weex 的webpack
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top