事情是这样的,咱们有一个原生(wxml,wxss,js,json)写的小程序,要加入一个新的模块,而且时间比较紧张。因此咱们选择了采用mpvue开发一个分包(subpackage),加入到原生小程序中,并确保被正确加载。下面说一下踩到的坑。css
首先说一下目录结构,上一张图:html
上面的目录结构中,将mpvue项目目录跟原生小程序目录在同一个项目根目录下,而后经过修改webpack配置文件将build文件目录修改到原生小程序目录下面。而后再经过小程序的app,json的配置,将mpvue build完成的小程序页面文件做为主包的一个分包加载。vue
首先介绍一下webpack相关的修改,配置文件在mpvue目录/config/index.js
下,主要修改的是assetsRoot
, assetsSubDirectory
, assetsPublicPath
三个字段,这三个字段决定了当你执行npm run build
命令时,文件的生成路径,这里经过修改这些路径,使生成的文件不在mpvue项目目录下,而在小程序的目录下:node
module.exports = { build: { env: require('./prod.env'), index: path.resolve(__dirname, '../dist/index.html'), assetsRoot: path.resolve(__dirname, '../../dist/register'), assetsSubDirectory: 'static', assetsPublicPath: '/register', // ... }, dev: { env: require('./dev.env'), port: 8080, // 在小程序开发者工具中不须要自动打开浏览器 autoOpenBrowser: false, productionSourceMap: false, assetsSubDirectory: 'static', assetsPublicPath: '/register', proxyTable: {}, cssSourceMap: false } }
在完成上一步后,执行npm run build
命令时,就会在原生小程序下面生成一个文件夹里面是mpvue打包后的页面文件。那么接下来就是修改app.json的配置,从而能够是分包中的页面文件正确被主包加载了,配置以下:webpack
// ... "subPackages": [ { "root": "register/", "pages": [ "pages/index/main", "pages/school/main", "pages/new-school/main" ] } ],
这里的root字段就是上面mpvue中的build目录register
,下面的pages是相对于root的路径,通过以上三步,就能够把mpvue生成的文件做为分包加载了。若是没有正确跑起来,报了下面的错误,请继续往下看:git
File not found: static/css/vendor.wxss
这是因为 MpvuePlugin的实现没有考虑跨目录build形成的。可在node_modules下面找到_webpack-mpvue-asset-plugin@0.0.1@webpack-mpvue-asset-plugin
下的index.js
文件,替换为这个修改过的文件,做用就是使assetPublicPath生效。从而保证css资源引用不会出错。[完]github