схема субподряда mpvue
- Официальный субподряд МПВУЭ
- Используйте плагин mpvue-entry
официальный субподряд mpvue
адрес: mpvue-docs/change-log
Основные модификации:
-
build/webpack.base.conf.js
Добавлены файлы '/.json$/' для элементов копирования, включая app.json и страницы под страницами. json-файл. Скопируйте каталог изображений в dist. -
build/webpack.prod.conf.js, build/webpack.dev.conf.js
Файлы css и js были упакованы в отдельные каталоги css и js соответственно и заменены на однофайловые каталоги pages. vendor.js и manifest.js упакованы вместе в общий каталог.поставщик извлекается путем извлечения блока кода подключаемого модуля общего модуля (модульная часть кода, сама полоса веб-пакета) и проявляется поставщиком на основе частичного удаления Zaichou изменения, например, в разделе js-контента загрузки асинхронного модуля. .
-
config/index.js
Сгенерированный путь пакета среды разработки и производственной среды изменен с исходного статического на один каталог файлов. -
package.json
Обновление: "mpvue-loader": "^1.1.1-rc.4" "webpack-mpvue-asset-plugin": "^0.1.1"
Добавлено: "относительно": "^3.0.2" -
src/main.js
удалить конфигурацию конфигурации
-
src/app,.json
Перенесите конфигурацию из оригинального src/main.js в файл app.json (конфигурация на странице JS перенесена в main.json)
Несовместимые места:
- mpvue-loader@1.1.2-rc.4+ зависит от webpack-mpvue-asset-plugin@0.1.1+ для ссылки на ресурс
- Для информации о конфигурации, записанной ранее в main.js, вам необходимо создать новый файл main.json в том же каталоге, что и main.js, и использовать webapck-copy-plugin, чтобы скопировать его в каталог сборки.
Для необходимости «создавать новый файл main.json в каждом каталоге того же уровня исходных страниц» этот метод не стесняется добавлять большое количество отдельных файлов конфигурации для субподряда (если проект становится больше), main. js и main.json По-видимому, наносит ущерб обслуживанию проекта.
Каталог проекта:
Каталог сборки пакета:
Используйте библиотеку mpvue-entry для подпакета
«Централизованная конфигурация страниц, автоматическое создание входных файлов для каждой страницы, оптимизация структуры каталогов и поддержка горячего обновления новых страниц»
принцип:
Используя src/main.js в качестве шаблона, используйте атрибуты пути и конфигурации в файле конфигурации, чтобы заменить путь импорта файла vue и информацию об экспорте соответственно.
адрес: mpvue-enrty
трафарет: F-loat/mpvue-quickstart
Основные модификации (на основе приведенной выше официальной конфигурации субподряда):
-
package.json
Обновление: «mpvue-loader»: «1.1.2», «webpack-mpvue-asset-plugin»: «0.1.1»
Добавлено: "mpvue-entry": "1.5.3" -
build/webpack.base.conf.js
// entry更改
const MpvueEntry = require('mpvue-entry')
module.exports = {
// src/pages.js文件是页面路由route,页面路径path和小程序页面设置config的集合
entry: MpvueEntry.getEntry('src/pages.js'),
...
plugins: [
new MpvueEntry(),
...
]
}
-
маршрутизация
- SRC/ROUTER/HOME.JS (запись маршрутизации модуля)
// 首页 const home = [ { // 路由 route: 'pages/index/index', // 路径 path: 'pages/index', // 配置 config: { navigationBarTitleText: 'CPASS', navigationBarBackgroundColor: '#7E73FF', navigationBarTextStyle: '#FFFFFF', enablePullDownRefresh: true }, // 设置分包 // subPackage: true, // root: 'pages/index' } ] module.exports = home
- src/router/index.js (открывает запись всех маршрутов)
// 路由入口文件 const home = require('./home'); const router = [ ...home ] module.exports = router
- src/pages.js (маршрут импорта)
// 该文件是在node环境下执行,需要使用CommonJS模块规范 // 将路由模块化,方便维护 const routes = require('./router'); module.exports = routes
-
src/app.json (глобальная конфигурация апплета)
{
"pages": [],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black"
},
"tabBar": {
"position": "bottom",
"color": "#AEAEBD",
"selectedColor": "#8C68FE",
"backgroundColor": "#FFFFFF",
"borderStyle": "#E1E1E6",
"list": [{
"text": "发现",
"pagePath": "pages/index/index",
"iconPath": "/static/images/icon-found-nor.png",
"selectedIconPath": "/static/images/icon-found-pre.png"
}, {
"text": "我的",
"pagePath": "pages/my/my",
"iconPath": "/static/images/icon-my-nor.png",
"selectedIconPath": "/static/images/icon-my-pre.png"
}]
}
}
Каталог проекта:
Сгенерированный каталог в целом соответствует официальной схеме субподряда.
Суммировать
-
Использование субподрядчиков mpvue-entry упрощает структуру каталогов проекта, а также упрощает последующее обслуживание, но все еще есть некоторые проблемы, связанные с оптимизацией теплового обновления.
-
Если WeChat официально обновляет конфигурацию поля в app.json, этот плагин необходимо обновить вручную. Например, в базовой библиотеке WeChat v2.3.0 (2018.09.10) были обновлены свойства «независимая» и «preloadRule», соответствующие [Независимая субконтрактная] и [Предварительная загрузка субконтрактной] соответственно. В настоящее время нет записи для настройки.
// lib/compiler.js /** * @param {Object} paths * @param {String} paths.app * @param {Object} pages * @param {Array} pages.formated * @param {String} template */ function genConfig(paths, pages, home) { require.cache[paths.app] = null; const app = require(paths.app); app.pages = pages.formated .filter(page => !page.subPackage) .map(page => page.path); app.subPackages = pages.formated .filter(page => page.subPackage) .reduce((result, page) => { const root = page.root || page.path.replace(/\/.*$/, ''); const subPath = page.path.replace(`${root}/`, ''); const subIndex = result.findIndex(subPackage => subPackage.root === root); if (subIndex === -1) { result.push({ root, pages: [subPath], }); } else { result[subIndex].pages.push(subPath); } return result; }, []); .......... }
-
Все подкаталоги в корневом каталоге subPackage должны быть упакованы в текущий корневой каталог.
-
Наконец, позовите Йоду, чтобы он вернулся, чтобы спасти mpvue.