123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 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 = {
- // 如果要自定义生成的 dist 目录里面的文件路径,
- // 可以将 entry 写成 {'toPath': 'fromPath'} 的形式,
- // toPath 为相对于 dist 的路径, 例:index/demo,则生成的文件地址为 dist/index/demo.js
- 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: /\.(js|vue)$/,
- // loader: 'eslint-loader',
- // enforce: 'pre',
- // include: [resolve('src'), resolve('test')],
- // options: {
- // formatter: require('eslint-friendly-formatter')
- // }
- // },
- {
- 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]')
- }
- },
- {
- test: /\.scss$/,
- loader: ["style", "css", "sass"]
- }
- ]
- },
- plugins: [
- // api 统一桥协议方案
- 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: ['.*']
- }
- ])
- ]
- }
- // 针对百度小程序,由于不支持通过 miniprogramRoot 进行自定义构建完的文件的根路径
- // 所以需要将项目根路径下面的 project.swan.json 拷贝到构建目录
- // 然后百度开发者工具将 dist/swan 作为项目根目录打
- 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
|