Skip to content

Commit 331c2b5

Browse files
committed
chore: update dependencies version
1 parent e8263e2 commit 331c2b5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+5739
-5890
lines changed

.postcssrc.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
// https://github.com/michael-ciniawsky/postcss-load-config
22

33
module.exports = {
4-
"plugins": {
5-
// to edit target browsers: use "browserslist" field in package.json
6-
"autoprefixer": {},
7-
"postcss-mpvue-wxss": {}
8-
}
4+
"plugins": {
5+
"postcss-mpvue-wxss": {}
6+
}
97
}

README.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 关于升级 mpvue 2.0 改动通知
2+
3+
最近经常收到项目无法运行的反馈,经排查发现大部分原因是相关依赖版本不对导致的,索性直接升级到 2.0.
4+
5+
2.0 提供了不少新特性, 具体参考官方文档 https://github.com/Meituan-Dianping/mpvue/releases/tag/2.0.0
6+
17
### 使用教程
28

39
第一步 克隆项目到本地
@@ -9,18 +15,19 @@
915
// 前提肯定是要进入项目目录啦 cd mpvue-tutorials
1016
npm i
1117

12-
第三步 启动开发环境,并监控文件改动,实时编译
18+
第三步 打开你的微信开发者工具,新建一个小程序,项目目录指向`mpvue-tutorials/dist/wx`,没有这个目录的话,就自己建一个
1319

14-
npm run dev
1520

16-
第四步 打开你的微信开发者工具,新建一个小程序,项目目录指向`mpvue-tutorials/dist`,就可以看到效果了
21+
第四步 启动开发环境,并监控文件改动,实时编译
1722

23+
npm run dev
1824

1925
第五步 在`src/pages`目录下添加或者改动页面,查看效果
2026
如果是添加页面,需要在 `src/main.js` 里面添加对应的路由
2127

2228
### 发布项目
2329
npm run build
24-
打包的文件,跟` npm run dev`一样,也是放在`mpvue-tutorials/dist`中,同时,发布的是需要注意以下几点
30+
打包的文件,跟` npm run dev`一样,也是放在`mpvue-tutorials/dist/wx`中,同时,发布的是需要注意以下几点
2531
1. 如果之前有 `npm run dev` 那么在发布之前,请先停止dev。
2632
2. 如果打包之后,控制台有报错,请关闭微信开发者工具的 es6代码转换,代码压缩。
33+

build/build.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require('./check-versions')()
22

33
process.env.NODE_ENV = 'production'
4+
process.env.PLATFORM = process.argv[process.argv.length - 1] || 'wx'
45

56
var ora = require('ora')
67
var rm = require('rimraf')
@@ -9,15 +10,19 @@ var chalk = require('chalk')
910
var webpack = require('webpack')
1011
var config = require('../config')
1112
var webpackConfig = require('./webpack.prod.conf')
13+
var utils = require('./utils')
1214

1315
var spinner = ora('building for production...')
1416
spinner.start()
1517

16-
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18+
rm(path.join(config.build.assetsRoot, '*'), err => {
1719
if (err) throw err
1820
webpack(webpackConfig, function (err, stats) {
1921
spinner.stop()
2022
if (err) throw err
23+
if (process.env.PLATFORM === 'swan') {
24+
utils.writeFrameworkinfo()
25+
}
2126
process.stdout.write(stats.toString({
2227
colors: true,
2328
modules: false,

build/dev-server.js

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require('./check-versions')()
22

3+
process.env.PLATFORM = process.argv[process.argv.length - 1] || 'wx'
34
var config = require('../config')
45
if (!process.env.NODE_ENV) {
56
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
@@ -10,7 +11,9 @@ var path = require('path')
1011
var express = require('express')
1112
var webpack = require('webpack')
1213
var proxyMiddleware = require('http-proxy-middleware')
14+
var portfinder = require('portfinder')
1315
var webpackConfig = require('./webpack.dev.conf')
16+
var utils = require('./utils')
1417

1518
// default port where dev server listens for incoming traffic
1619
var port = process.env.PORT || config.dev.port
@@ -22,6 +25,9 @@ var proxyTable = config.dev.proxyTable
2225

2326
var app = express()
2427
var compiler = webpack(webpackConfig)
28+
if (process.env.PLATFORM === 'swan') {
29+
utils.writeFrameworkinfo()
30+
}
2531

2632
// var devMiddleware = require('webpack-dev-middleware')(compiler, {
2733
// publicPath: webpackConfig.output.publicPath,
@@ -63,7 +69,7 @@ app.use(require('connect-history-api-fallback')())
6369
var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
6470
app.use(staticPath, express.static('./static'))
6571

66-
var uri = 'http://localhost:' + port
72+
// var uri = 'http://localhost:' + port
6773

6874
var _resolve
6975
var readyPromise = new Promise(resolve => {
@@ -80,17 +86,26 @@ var readyPromise = new Promise(resolve => {
8086
// _resolve()
8187
// })
8288

83-
var server = app.listen(port, 'localhost')
84-
85-
// for 小程序的文件保存机制
86-
require('webpack-dev-middleware-hard-disk')(compiler, {
87-
publicPath: webpackConfig.output.publicPath,
88-
quiet: true
89+
module.exports = new Promise((resolve, reject) => {
90+
portfinder.basePort = port
91+
portfinder.getPortPromise()
92+
.then(newPort => {
93+
if (port !== newPort) {
94+
console.log(`${port}端口被占用,开启新端口${newPort}`)
95+
}
96+
var server = app.listen(newPort, 'localhost')
97+
// for 小程序的文件保存机制
98+
require('webpack-dev-middleware-hard-disk')(compiler, {
99+
publicPath: webpackConfig.output.publicPath,
100+
quiet: true
101+
})
102+
resolve({
103+
ready: readyPromise,
104+
close: () => {
105+
server.close()
106+
}
107+
})
108+
}).catch(error => {
109+
console.log('没有找到空闲端口,请打开任务管理器杀死进程端口再试', error)
110+
})
89111
})
90-
91-
module.exports = {
92-
ready: readyPromise,
93-
close: () => {
94-
server.close()
95-
}
96-
}

build/utils.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
var path = require('path')
2+
var fs = require('fs')
23
var config = require('../config')
34
var ExtractTextPlugin = require('extract-text-webpack-plugin')
5+
var mpvueInfo = require('../node_modules/mpvue/package.json')
6+
var packageInfo = require('../package.json')
7+
var mkdirp = require('mkdirp')
48

59
exports.assetsPath = function (_path) {
610
var assetsSubDirectory = process.env.NODE_ENV === 'production'
@@ -37,7 +41,7 @@ exports.cssLoaders = function (options) {
3741

3842
// generate loader string to be used with extract text plugin
3943
function generateLoaders (loader, loaderOptions) {
40-
var loaders = [cssLoader, postcssLoader, px2rpxLoader]
44+
var loaders = [cssLoader, px2rpxLoader, postcssLoader]
4145
if (loader) {
4246
loaders.push({
4347
loader: loader + '-loader',
@@ -62,6 +66,7 @@ exports.cssLoaders = function (options) {
6266
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
6367
return {
6468
css: generateLoaders(),
69+
wxss: generateLoaders(),
6570
postcss: generateLoaders(),
6671
less: generateLoaders('less'),
6772
sass: generateLoaders('sass', { indentedSyntax: true }),
@@ -84,3 +89,29 @@ exports.styleLoaders = function (options) {
8489
}
8590
return output
8691
}
92+
93+
const writeFile = async (filePath, content) => {
94+
let dir = path.dirname(filePath)
95+
let exist = fs.existsSync(dir)
96+
if (!exist) {
97+
await mkdirp(dir)
98+
}
99+
await fs.writeFileSync(filePath, content, 'utf8')
100+
}
101+
102+
exports.writeFrameworkinfo = function () {
103+
var buildInfo = {
104+
'toolName': mpvueInfo.name,
105+
'toolFrameWorkVersion': mpvueInfo.version,
106+
'toolCliVersion': packageInfo.mpvueTemplateProjectVersion || '',
107+
'createTime': Date.now()
108+
}
109+
110+
var content = JSON.stringify(buildInfo)
111+
var fileName = '.frameworkinfo'
112+
var rootDir = path.resolve(__dirname, `../${fileName}`)
113+
var distDir = path.resolve(config.build.assetsRoot, `./${fileName}`)
114+
115+
writeFile(rootDir, content)
116+
writeFile(distDir, content)
117+
}

build/vue-loader.conf.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ module.exports = {
1616
source: 'src',
1717
img: 'src',
1818
image: 'xlink:href'
19-
}
19+
},
20+
fileExt: config.build.fileExt
2021
}

build/webpack.base.conf.js

Lines changed: 70 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,41 @@ var path = require('path')
22
var fs = require('fs')
33
var utils = require('./utils')
44
var config = require('../config')
5+
var webpack = require('webpack')
6+
var merge = require('webpack-merge')
57
var vueLoaderConfig = require('./vue-loader.conf')
8+
var MpvuePlugin = require('webpack-mpvue-asset-plugin')
9+
var glob = require('glob')
10+
var CopyWebpackPlugin = require('copy-webpack-plugin')
11+
var relative = require('relative')
612

713
function resolve (dir) {
814
return path.join(__dirname, '..', dir)
915
}
1016

11-
function getEntry (dir, entryFile) {
12-
const files = fs.readdirSync(dir)
13-
return files.reduce((res, k) => {
14-
const page = path.resolve(dir, k, entryFile)
15-
if (fs.existsSync(page)) {
16-
res[k] = page
17-
}
18-
return res
19-
}, {})
17+
function getEntry (rootSrc) {
18+
var map = {};
19+
glob.sync(rootSrc + '/pages/**/main.js')
20+
.forEach(file => {
21+
var key = relative(rootSrc, file).replace('.js', '');
22+
map[key] = file;
23+
})
24+
return map;
2025
}
2126

2227
const appEntry = { app: resolve('./src/main.js') }
23-
const pagesEntry = getEntry(resolve('./src/pages'), 'main.js')
28+
const pagesEntry = getEntry(resolve('./src'), 'pages/**/main.js')
2429
const entry = Object.assign({}, appEntry, pagesEntry)
2530

26-
module.exports = {
27-
entry: entry,
31+
let baseWebpackConfig = {
32+
// 如果要自定义生成的 dist 目录里面的文件路径,
33+
// 可以将 entry 写成 {'toPath': 'fromPath'} 的形式,
34+
// toPath 为相对于 dist 的路径, 例:index/demo,则生成的文件地址为 dist/index/demo.js
35+
entry,
2836
target: require('mpvue-webpack-target'),
2937
output: {
3038
path: config.build.assetsRoot,
39+
jsonpFunction: 'webpackJsonpMpvue',
3140
filename: '[name].js',
3241
publicPath: process.env.NODE_ENV === 'production'
3342
? config.build.assetsPublicPath
@@ -39,7 +48,9 @@ module.exports = {
3948
'vue': 'mpvue',
4049
'@': resolve('src')
4150
},
42-
symlinks: false
51+
symlinks: false,
52+
aliasFields: ['mpvue', 'weapp', 'browser'],
53+
mainFields: ['browser', 'module', 'main']
4354
},
4455
module: {
4556
rules: [
@@ -55,9 +66,7 @@ module.exports = {
5566
'babel-loader',
5667
{
5768
loader: 'mpvue-loader',
58-
options: {
59-
checkMPEntry: true
60-
}
69+
options: Object.assign({checkMPEntry: true}, vueLoaderConfig)
6170
},
6271
]
6372
},
@@ -74,7 +83,7 @@ module.exports = {
7483
loader: 'url-loader',
7584
options: {
7685
limit: 10000,
77-
name: utils.assetsPath('media/[name]].[ext]')
86+
name: utils.assetsPath('media/[name].[ext]')
7887
}
7988
},
8089
{
@@ -86,5 +95,48 @@ module.exports = {
8695
}
8796
}
8897
]
89-
}
98+
},
99+
plugins: [
100+
// api 统一桥协议方案
101+
new webpack.DefinePlugin({
102+
'mpvue': 'global.mpvue',
103+
'mpvuePlatform': 'global.mpvuePlatform'
104+
}),
105+
new MpvuePlugin(),
106+
new CopyWebpackPlugin([{
107+
from: '**/*.json',
108+
to: ''
109+
}], {
110+
context: 'src/'
111+
}),
112+
new CopyWebpackPlugin([
113+
{
114+
from: path.resolve(__dirname, '../static'),
115+
to: path.resolve(config.build.assetsRoot, './static'),
116+
ignore: ['.*']
117+
}
118+
])
119+
]
120+
}
121+
122+
// 针对百度小程序,由于不支持通过 miniprogramRoot 进行自定义构建完的文件的根路径
123+
// 所以需要将项目根路径下面的 project.swan.json 拷贝到构建目录
124+
// 然后百度开发者工具将 dist/swan 作为项目根目录打
125+
const projectConfigMap = {
126+
tt: '../project.config.json',
127+
swan: '../project.swan.json'
90128
}
129+
130+
const PLATFORM = process.env.PLATFORM
131+
if (/^(swan)|(tt)$/.test(PLATFORM)) {
132+
baseWebpackConfig = merge(baseWebpackConfig, {
133+
plugins: [
134+
new CopyWebpackPlugin([{
135+
from: path.resolve(__dirname, projectConfigMap[PLATFORM]),
136+
to: path.resolve(config.build.assetsRoot)
137+
}])
138+
]
139+
})
140+
}
141+
142+
module.exports = baseWebpackConfig

0 commit comments

Comments
 (0)