Skip to content

Commit 4a7c757

Browse files
committed
merge develop
2 parents 688e8b2 + fb5a597 commit 4a7c757

File tree

4 files changed

+97
-43
lines changed

4 files changed

+97
-43
lines changed

bin/mpvue-simple

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ upgradeLogger()
55

66
var argv = require('yargs').argv;
77

8+
if (argv.version || argv.v) {
9+
const { version } = require('../package.json')
10+
return process.stdout.write(version)
11+
}
12+
813
if (argv.build) {
914
require('../build/build.js')
1015
} else {

build/dev-server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var proxyMiddleware = require('http-proxy-middleware')
1313
var webpackConfig = require('./webpack.dev.conf')
1414

1515
// default port where dev server listens for incoming traffic
16-
var port = process.env.PORT || config.dev.port
16+
var port = config.dev.port || 8080
1717
// automatically open browser, if not set will be false
1818
var autoOpenBrowser = !!config.dev.autoOpenBrowser
1919
// Define HTTP proxies to your custom API backend

config/argv.js

Lines changed: 87 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
var path = require('path')
22
var fs = require('fs')
3+
var util = require('util')
4+
var resolve = require('resolve')
5+
var glob = require('glob')
36
// const { NpmAutoInstallWebpackPlugin } = require('npm-auto-install-webpack-plugin')
47

58
function saveEntryMain(index, src, mpType) {
@@ -22,34 +25,66 @@ export default {
2225
return fileSrc
2326
}
2427

25-
function searchEntry(dir, config, entryName, mpType) {
26-
if (!fs.existsSync(dir)) {
27-
return
28+
function resolveEntry (src, cwd) {
29+
try {
30+
return resolve.sync(src, { basedir: cwd })
31+
} catch (err) {
32+
// console.log(err)
2833
}
34+
return ''
35+
}
2936

30-
const files = fs.readdirSync(dir)
31-
if (files.includes('main.js')) {
32-
config.entry[entryName || path.basename(dir)] = path.resolve(dir, 'main.js')
33-
return
37+
// 如果有 main.js 就不找 app.vue 了,免得混乱
38+
function searchEntry(pattern, entryName, cwd, config) {
39+
const entryFiles = glob.sync(pattern, { cwd })
40+
if (!entryFiles.length) {
41+
return false
3442
}
3543

36-
files.forEach((k, i) => {
37-
const page = path.resolve(dir, k)
38-
if (fs.existsSync(page) && searchFileFilter.some(f => f.test(page))) {
39-
config.entry[entryName || path.parse(page).name] = saveEntryMain(i, page, mpType)
40-
}
44+
if (entryFiles.length === 1) {
45+
const realSrc = path.resolve(cwd, entryFiles[0])
46+
config.entry[getEntryName(realSrc, entryName)] = realSrc
47+
return true
48+
}
49+
50+
entryFiles.forEach((k, i) => {
51+
const src = path.resolve(cwd, k)
52+
config.entry[getEntryName(src)] = src
4153
})
54+
55+
return true
4256
}
4357

58+
function getEntryName (src, pageName) {
59+
if (pageName) {
60+
return pageName
61+
}
62+
const { dir, name } = path.parse(src)
63+
if (['app', 'App', 'main', 'index'].includes(name)) {
64+
return path.parse(dir).name
65+
}
66+
return name
67+
}
68+
69+
// 暂时只想到这么做缓存
4470
let argvOptions = null
45-
let searchPath = ['./', './src', './src/pages', './mpvue-pages']
46-
let searchFileFilter = [/.*?\.vue$/, /main\.js/]
4771
function injectArgvOptions (options) {
4872
argvOptions = options
4973
}
5074

75+
// 默认优先为完整路径的单文件
76+
// 其次是 glob 格式扫描到的文件
77+
// 其次是 node.js 本地运行时传递的 object
78+
// 再次是一个路径下,默认扫描
79+
// 最后才是默认路径,默认扫描
80+
// component 针对所有扫描到的 .vue SFC entry 才有用
81+
// 有且只有一个 entry 的时候 pageName 才有效
5182
function mergeArgvConfig (config) {
5283
// 默认初始化
84+
const cwd = path.resolve()
85+
const defConfig = { entry: {}, resolve: { alias: {} } }
86+
const floders = ['./src/', './mpvue-pages/']
87+
const searchFilters = ['./**/**/main.js', './**/**/app.vue', './**/**/App.vue', './**/**/index.vue']
5388
config.argvConfig = {
5489
// plugins: [
5590
// new NpmAutoInstallWebpackPlugin()
@@ -59,42 +94,47 @@ function mergeArgvConfig (config) {
5994
// 拼接自定义的参数
6095
var argv = Object.assign({}, argvOptions, require('yargs').argv)
6196
const {
62-
entry: argvEntry,
63-
output: argvOutput,
64-
config: argvCnf,
65-
pageName: argvPageName,
66-
searchPath: argvSearchPath,
67-
component: argvComponent,
97+
entry: argvEntry, // ./src/main.js, ./src/app.vue, ./src/, ./src/**/main.js, { page: './page/main.js' }, undefined
98+
pageName: argvPageName, // nameStrng, undefined
99+
component: argvComponent, // true, undefined
100+
output: argvOutput, // pathString, undefined
101+
config: argvCnf, // pathString, undefined
68102
...resetConfig
69103
} = argv
70-
const defConfig = { entry: {}, resolve: { alias: {} } }
71104
const mpType = argvComponent ? 'component' : 'page'
72105

73-
if (typeof argvPageName === 'string') {
74-
searchPath = searchPath.concat(argvPageName.split(','))
75-
}
76-
106+
// 开始获取 entry
77107
if (typeof argvEntry === 'string') {
78-
const entryPath = path.resolve(argvEntry)
79-
if (typeof argvPageName === 'string') {
80-
const entryName = argvPageName || path.parse(entryPath).name
81-
defConfig.entry[entryName] = entryPath
82-
} else if (fs.existsSync(entryPath)) {
83-
defConfig.entry[path.parse(entryPath).name] = entryPath
108+
// 首先判断是不是完整路径
109+
const curEntry = resolveEntry(argvEntry, cwd)
110+
// const absEntry = path.resolve(argvEntry)
111+
if (curEntry) {
112+
defConfig.entry[getEntryName(curEntry, argvPageName)] = curEntry
84113
} else {
85-
searchEntry(entryPath, defConfig, argvPageName, mpType)
114+
// 先检查是否是 glob 格式的 filter
115+
// 再检查这是不是路径
116+
if (!searchEntry(argvEntry, argvPageName, cwd, defConfig)) {
117+
floders.unpop()
118+
}
86119
}
120+
} else if (util.isObject(argvEntry)) {
121+
defConfig.entry = argvEntry
87122
} else {
88-
searchPath.forEach(s => {
89-
searchEntry(path.resolve(s), defConfig, argvPageName, mpType)
123+
const allPattern = floders.reduce((r, floder) => {
124+
return r.concat(searchFilters.map(v => path.join(floder, v)))
125+
}, [])
126+
allPattern.some(pattern => {
127+
return searchEntry(pattern, argvPageName, cwd, defConfig)
90128
})
91129
}
92130

131+
// 输出文件夹
93132
if (argvOutput) {
94133
const assetsRoot = path.resolve(argvOutput)
95134
defConfig.assetsRoot = assetsRoot
96135
}
97136

137+
// 合并自定义 webpack config
98138
if (typeof argvCnf === 'string') {
99139
try {
100140
config.argvConfig = require('webpack-merge')(config.argvConfig, require(path.resolve(argvCnf)))
@@ -104,6 +144,19 @@ function mergeArgvConfig (config) {
104144
Object.assign(config.build, resetConfig, defConfig)
105145
Object.assign(config.dev, resetConfig, defConfig)
106146

147+
const allEntry = Object.keys(defConfig.entry)
148+
149+
if (!allEntry.length) {
150+
throw Error('At least one entry is needed: http://mpvue.com/mpvue/simple/')
151+
}
152+
153+
// 处理 component 和 .vue 的 entry
154+
allEntry.forEach((v, i) => {
155+
if (path.extname(v) === '.vue') {
156+
defConfig.entry[v] = saveEntryMain(i, v, mpType)
157+
}
158+
})
159+
107160
return config
108161
}
109162

package.json

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mpvue-simple",
3-
"version": "1.0.3",
3+
"version": "1.0.5",
44
"description": "辅助 mpvue 快速开发 Page / Component 级小程序页面的工具",
55
"main": "index.js",
66
"bin": "bin/mpvue-simple",
@@ -11,15 +11,14 @@
1111
"build": "node build/build.js"
1212
},
1313
"dependencies": {
14-
"mpvue": "^1.0.3",
15-
"mpvue-loader": "^1.0.4",
16-
"mpvue-template-compiler": "^1.0.3",
14+
"mpvue": "^1.0.5",
15+
"mpvue-loader": "^1.0.6",
16+
"mpvue-template-compiler": "^1.0.5",
1717
"mpvue-webpack-target": "^1.0.0",
1818
"postcss-mpvue-wxss": "^1.0.0",
1919
"px2rpx-loader": "^0.1.8",
2020
"npm-auto-install-webpack-plugin": "^0.2.0",
2121
"yargs": "^11.0.0",
22-
"autoprefixer": "^7.1.2",
2322
"babel-core": "^6.22.1",
2423
"babel-loader": "^7.1.1",
2524
"babel-plugin-transform-runtime": "^6.22.0",
@@ -38,7 +37,6 @@
3837
"friendly-errors-webpack-plugin": "^1.1.3",
3938
"html-webpack-plugin": "^2.28.0",
4039
"http-proxy-middleware": "^0.17.3",
41-
"opn": "^5.1.0",
4240
"optimize-css-assets-webpack-plugin": "^2.0.0",
4341
"ora": "^1.2.0",
4442
"postcss-loader": "^2.0.6",
@@ -49,9 +47,7 @@
4947
"vue-style-loader": "^3.0.1",
5048
"webpack": "^2.6.1",
5149
"webpack-bundle-analyzer": "^2.2.1",
52-
"webpack-dev-middleware": "^1.10.0",
5350
"webpack-dev-middleware-hard-disk": "^1.10.0",
54-
"webpack-hot-middleware": "^2.18.0",
5551
"webpack-merge": "^4.1.0"
5652
},
5753
"engines": {

0 commit comments

Comments
 (0)