|
@@ -0,0 +1,142 @@
|
|
|
+var path = require('path')
|
|
|
+var fs = require('fs')
|
|
|
+var utils = require('./utils')
|
|
|
+var config = require('../config')
|
|
|
+var webpack = require('webpack')
|
|
|
+var merge = require('webpack-merge')
|
|
|
+var vueLoaderConfig = require('./vue-loader.conf')
|
|
|
+var MpvuePlugin = require('webpack-mpvue-asset-plugin')
|
|
|
+var glob = require('glob')
|
|
|
+var CopyWebpackPlugin = require('copy-webpack-plugin')
|
|
|
+var relative = require('relative')
|
|
|
+
|
|
|
+function resolve (dir) {
|
|
|
+ return path.join(__dirname, '..', dir)
|
|
|
+}
|
|
|
+
|
|
|
+function getEntry (rootSrc) {
|
|
|
+ var map = {};
|
|
|
+ glob.sync(rootSrc + '/pages/**/main.js')
|
|
|
+ .forEach(file => {
|
|
|
+ var key = relative(rootSrc, file).replace('.js', '');
|
|
|
+ map[key] = file;
|
|
|
+ })
|
|
|
+ return map;
|
|
|
+}
|
|
|
+
|
|
|
+const appEntry = { app: resolve('./src/main.js') }
|
|
|
+const pagesEntry = getEntry(resolve('./src'), 'pages/**/main.js')
|
|
|
+const entry = Object.assign({}, appEntry, pagesEntry)
|
|
|
+
|
|
|
+let baseWebpackConfig = {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ entry,
|
|
|
+ target: require('mpvue-webpack-target'),
|
|
|
+ output: {
|
|
|
+ path: config.build.assetsRoot,
|
|
|
+ jsonpFunction: 'webpackJsonpMpvue',
|
|
|
+ filename: '[name].js',
|
|
|
+ publicPath: process.env.NODE_ENV === 'production'
|
|
|
+ ? config.build.assetsPublicPath
|
|
|
+ : config.dev.assetsPublicPath
|
|
|
+ },
|
|
|
+ resolve: {
|
|
|
+ extensions: ['.js', '.vue', '.json'],
|
|
|
+ alias: {
|
|
|
+ 'vue': 'mpvue',
|
|
|
+ '@': resolve('src')
|
|
|
+ },
|
|
|
+ symlinks: false,
|
|
|
+ aliasFields: ['mpvue', 'weapp', 'browser'],
|
|
|
+ mainFields: ['browser', 'module', 'main']
|
|
|
+ },
|
|
|
+ module: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ test: /\.vue$/,
|
|
|
+ loader: 'mpvue-loader',
|
|
|
+ options: vueLoaderConfig
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test: /\.js$/,
|
|
|
+ include: [resolve('src'), resolve('test')],
|
|
|
+ use: [
|
|
|
+ 'babel-loader',
|
|
|
+ {
|
|
|
+ loader: 'mpvue-loader',
|
|
|
+ options: Object.assign({checkMPEntry: true}, vueLoaderConfig)
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
|
|
+ loader: 'url-loader',
|
|
|
+ options: {
|
|
|
+ limit: 10000,
|
|
|
+ name: utils.assetsPath('img/[name].[ext]')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
|
|
+ loader: 'url-loader',
|
|
|
+ options: {
|
|
|
+ limit: 10000,
|
|
|
+ name: utils.assetsPath('media/[name].[ext]')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
|
|
+ loader: 'url-loader',
|
|
|
+ options: {
|
|
|
+ limit: 10000,
|
|
|
+ name: utils.assetsPath('fonts/[name].[ext]')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ plugins: [
|
|
|
+
|
|
|
+ new webpack.DefinePlugin({
|
|
|
+ 'mpvue': 'global.mpvue',
|
|
|
+ 'mpvuePlatform': 'global.mpvuePlatform'
|
|
|
+ }),
|
|
|
+ new MpvuePlugin(),
|
|
|
+ new CopyWebpackPlugin([{
|
|
|
+ from: '**/*.json',
|
|
|
+ to: ''
|
|
|
+ }], {
|
|
|
+ context: 'src/'
|
|
|
+ }),
|
|
|
+ new CopyWebpackPlugin([
|
|
|
+ {
|
|
|
+ from: path.resolve(__dirname, '../static'),
|
|
|
+ to: path.resolve(config.build.assetsRoot, './static'),
|
|
|
+ ignore: ['.*']
|
|
|
+ }
|
|
|
+ ])
|
|
|
+ ]
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+const projectConfigMap = {
|
|
|
+ tt: '../project.config.json',
|
|
|
+ swan: '../project.swan.json'
|
|
|
+}
|
|
|
+
|
|
|
+const PLATFORM = process.env.PLATFORM
|
|
|
+if (/^(swan)|(tt)$/.test(PLATFORM)) {
|
|
|
+ baseWebpackConfig = merge(baseWebpackConfig, {
|
|
|
+ plugins: [
|
|
|
+ new CopyWebpackPlugin([{
|
|
|
+ from: path.resolve(__dirname, projectConfigMap[PLATFORM]),
|
|
|
+ to: path.resolve(config.build.assetsRoot)
|
|
|
+ }])
|
|
|
+ ]
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = baseWebpackConfig
|