build文件夹是项目构建webpack相关代码
文件目录如下:
build
build.js 生产环境构建代码
check-version.js 检查node npm 版本
utils.js 构建工具相关
vue-loader.conf.js webpack loader设置
webpack.base.conf.js webpack基础配置
webpack.dev.conf.js webpack开发环境设置,构建本地服务器
webpack.pro.conf.js webpack生产环境配置
顺便说一下生产环境和开发环境的区别
开发环境,就是我们开发时的环境,在自己的分支上干活
生产环境就是用户使用的环境,由特定人员来维护,一般人没有权限修改
回归正题,下面是build目录的配置
一、build目录的buils.js文件
‘use strict’
require(’./check-versions’)()
process.env.NODE_ENV = ‘production’
const ora = require(‘ora’)
const rm = require(‘rimraf’)
const path = require(‘path’)
const chalk = require(‘chalk’)
const webpack = require(‘webpack’)
const config = require(’…/config’)
const webpackConfig = require(’./webpack.prod.conf’)
const spinner = ora(‘building for production…’)
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
chunks: false,
chunkModules: false
}) + ‘\n\n’)
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})
process对象是全局变量,它提供当前node.js的有关信息,以及控制当前node.js的有关进程。因为是全局变量,它对于node应用程序是始终可用的,无需require()。
既然process都是一个对象了,env自然是它的一个属性,这个属性返回包含用户环境信息的对象。在终端输入node后,在输入process.env可以看到打印出来的信息。
NODE_ENV不是process.env对象上原有的属性,它是我们自己添加上去的一个环境变量,用来确定当前所处的开发阶段。一般生产阶段设为production,开发阶段设为develop,然后在脚本中读取process.env.NODE_ENV。
运行脚本时,可以这样改变环境变量, 在package.json文件的scripts里面添加命令:
NODE_ENV=production node build.js
但是这个命令使用Windows的同学拉下代码后就报错了,因为Windows上面设置的方式不一样:
set NODE_ENV=production node build.js
但是不同电脑上不同的设置肯定是不行的呀,这个时候cross-env赶来救场了。
cross-env可以跨平台的设置和使用环境变量
安装:
npm install --save-dev cross-env
接下来我们就可以通过cross-env来设置了
cross-env NODE_ENV=production node build.js
这样设置之后,我们可以在脚本中使用process.env.NODE_ENV了,但是不能在模块中使用,要想在模块当中直接使用,我们还需要一些配置
DefinePlugin
DefinePlugin可以定义一些全局变量,让我们在模块当中直接使用,不用做任何声明
const webpack = require(‘webpack’);
module.exports = {
entry: {
app: ‘./src/app’
},
output: {
path: ‘dist’,
filename: ‘bundle.js’
},
plugins: [
new webpack.DefinePlugin({
‘process.env.NODE_ENV’: ‘production’
})
]
};
DefinePlugin直接将内容替换了,而不是一个字符串,所以我们经常这样定义:
new webpack.DefinePlugin({
‘process.env.NODE_ENV’: JSON.stringify(process.env.NODE_ENV)
})
这样就可以直接使用啦_
现在我们要在模块中根据环境变量来配置不同的url了
let url = ‘’;
if (process.env.NODE_ENV === ‘testing’) {
url = ‘http://my.test.cn’;
} else if (process.env.alpord === ‘alpord’) {
url = ‘http://my.alpord.cn’;
} else if (process.env.NODE_ENV === ‘production’) {
url = ‘http://my.product.cn’;
} else {
url = ‘http://my.develop.cn’;
}
使用:
npm install --save ora
const ora = require(‘ora’);
const spinner = ora(‘Loading unicorns’).start();
setTimeout(() => {
spinner.color = ‘yellow’;
spinner.text = ‘Loading rainbows’;
}, 1000);
spinner.start();//开始
spinner.stop();//结束
rimraf
rimraf 包的作用:以包的形式包装rm -rf命令,就是用来删除文件和文件夹的,不管文件夹是否为空,都可以删除。
path模块
Node.js path 模块提供了一些用于处理文件路径的小工具
chalk
chalk 包的作用是修改控制台中字符串的样式,包括:
字体样式(加粗、隐藏等)
字体颜色
背景颜色
利用node的rimraf模块删除dist文件夹
使用vue-cli构建webpack打包工具时,生产环境下,每次build时,删除dist目录,并重新生成,以防止dist目录文件越来越多