首页 > 语言 > JavaScript > 正文

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

2024-05-06 15:22:50
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选