// 详情见文档:https://vuejs-templates.github.io/webpack/env.html var path = require('path') module.exports = { // production 生产环境 build: { // 构建环境 env: require('./prod.env'), // 构建输出的index.html文件 index: path.resolve(__dirname, '../dist/index.html'), // 构建输出的静态资源路径 assetsRoot: path.resolve(__dirname, '../dist'), // 构建输出的二级目录 assetsSubDirectory: 'static', // 构建发布的根目录,可配置为资源服务器域名或 CDN 域名 assetsPublicPath: 'https://www.jb51.net/', // 是否开启 cssSourceMap productionSourceMap: true, // Gzip off by default as many popular static hosts such as // Surge or Netlify already gzip all static assets for you. // Before setting to `true`, make sure to: // npm install --save-dev compression-webpack-plugin // 默认关闭 gzip,因为很多流行的静态资源主机,例如 Surge、Netlify,已经为所有静态资源开启gzip productionGzip: false, // 需要使用 gzip 压缩的文件扩展名 productionGzipExtensions: ['js', 'css'], // Run the build command with an extra argument to // View the bundle analyzer report after build finishes: // `npm run build --report` // Set to `true` or `false` to always turn it on or off // 运行“build”命令行时,加上一个参数,可以在构建完成后参看包分析报告 // true为开启,false为关闭 bundleAnalyzerReport: process.env.npm_config_report }, // dev 开发环境 dev: { // 构建环境 env: require('./dev.env'), // 端口号 port: 3333, // 是否自动打开浏览器 autoOpenBrowser: true, assetsSubDirectory: 'static', // 编译发布的根目录,可配置为资源服务器域名或 CDN 域名 assetsPublicPath: 'https://www.jb51.net/', // proxyTable 代理的接口(可跨域) // 使用方法:https://vuejs-templates.github.io/webpack/proxy.html proxyTable: {}, // CSS Sourcemaps off by default because relative paths are "buggy" // with this option, according to the CSS-Loader README // (https://github.com/webpack/css-loader#sourcemaps) // In our experience, they generally work as expected, // just be aware of this issue when enabling this option. // 默认情况下,关闭 CSS Sourcemaps,因为使用相对路径会报错。 // CSS-Loader README:https://github.com/webpack/css-loader#sourcemaps cssSourceMap: false } }
utils.js
utils.js也是一个被使用频率的文件,这个文件包含了三个工具函数:
生成静态资源的路径
生成 ExtractTextPlugin对象或loader字符串
生成 style-loader的配置
// node自带的文件路径工具 var path = require('path') // 配置文件 var config = require('../config') // 提取css的插件 // https://github.com/webpack-contrib/extract-text-webpack-plugin var ExtractTextPlugin = require('extract-text-webpack-plugin') /** * 生成静态资源的路径 * @method assertsPath * @param {String} _path 相对于静态资源文件夹的文件路径 * @return {String} 静态资源完整路径 */ exports.assetsPath = function (_path) { var assetsSubDirectory = process.env.NODE_ENV === 'production' ? config.build.assetsSubDirectory : config.dev.assetsSubDirectory // path.posix.join与path.join一样,不过总是以 posix 兼容的方式交互 return path.posix.join(assetsSubDirectory, _path) } /** * 生成处理css的loaders配置 * @method cssLoaders * @param {Object} options 生成配置 * option = { * // 是否开启 sourceMap * sourceMap: true, * // 是否提取css * extract: true * } * @return {Object} 处理css的loaders配置对象 */ exports.cssLoaders = function (options) { options = options || {} var cssLoader = { loader: 'css-loader', options: { minimize: process.env.NODE_ENV === 'production', sourceMap: options.sourceMap } } /** * 生成 ExtractTextPlugin对象或loader字符串 * @method generateLoaders * @param {Array} loaders loader名称数组 * @return {String|Object} ExtractTextPlugin对象或loader字符串 */ function generateLoaders (loader, loaderOptions) { var loaders = [cssLoader] if (loader) { loaders.push({ // 例如,sass?indentedSyntax // 在?号前加上“-loader” loader: loader + '-loader', options: Object.assign({}, loaderOptions, { sourceMap: options.sourceMap }) }) } // extract为true时,提取css // 生产环境中,默认为true if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, fallback: 'vue-style-loader' }) } else { return ['vue-style-loader'].concat(loaders) } } // return { css: generateLoaders(), postcss: generateLoaders(), less: generateLoaders('less'), sass: generateLoaders('sass', { indentedSyntax: true }), scss: generateLoaders('sass'), stylus: generateLoaders('stylus'), styl: generateLoaders('stylus') } } /** * 生成 style-loader的配置 * style-loader文档:https://github.com/webpack/style-loader * @method styleLoaders * @param {Object} options 生成配置 * option = { * // 是否开启 sourceMap * sourceMap: true, * // 是否提取css * extract: true * } * @return {Array} style-loader的配置 */ exports.styleLoaders = function (options) { var output = [] var loaders = exports.cssLoaders(options) for (var extension in loaders) { var loader = loaders[extension] output.push({ test: new RegExp('\\.' + extension + '$'), use: loader }) } return output }
生产环境
开发环境的入口文件是build/build.js 。
build.js
该文件,为构建打包文件,会将源码进行构建(编译、压缩等)后打包。