webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序须要的每一个模块,而后将全部这些模块打包成一个或多个 bundle。javascript
经过vue-cli构建的webpack-vue项目css
npm install --global vue-cli
vue init webpack my-project
复制代码
build中是一些webpack的相关配置,包括基本配置、开发环境配置、生产环境配置等
针对开发环境、生产环境、测试环境的配置信息
package.json构建出的包
会被webpack处理
不会被webpack处理 webpack打包后,此目录下的文件会默认被复制到dist/static中,这是经过build.assetsPublicPath和buildSubDirectory来肯定的
用来配置babel
在不一样的编辑器和IDE之间定义和维护一致的代码风格
git pull时候要忽略的文件
配置postcss .vue-loader的postcss会默认读取这个文件
入口文件
制定了每一个模块及其每一个依赖项的版本位置和完整哈希。因此不管是用什么设备(跨平台)执行npm install 安装的依赖都是相同的
依赖
备注
一些概念html
__dirname: 得到当前执行文件所在目录的完整目录名
__filename: 得到当前执行文件的带有完整绝对路径的文件名
process.cwd():得到当前执行node命令时候的文件夹目录名
./: 文件所在目录
../: 文件所在的上级目录
/: 文件所在的根目录
复制代码
path.dirname() 方法返回 path 的目录名
path.dirname('/foo/bar/baz/asdf/quux');
// 返回: '/foo/bar/baz/asdf'
复制代码
path.join([...paths])方法使用平台特定的分隔符做为定界符将全部给定的 path 片断链接在一块儿,而后规范化生成的路径。
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'
path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'
复制代码
【webpack.base.conf.js】内容以下vue
const path = require('path'); //require是Node.js全局函数
const ROOT = path.dirname(__dirname);
const SRC = path.join(ROOT, 'src');
const DIST = path.join(ROOT, 'dist');
module.exports = {
entry: { //入口起点(entry point)指示 webpack 应该使用哪一个模块,来做为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。
index: path.join(SRC, 'index', 'js', 'index.js'),
payresult: path.join(SRC, 'payresult', 'js', 'index.js'),
paysuccess: path.join(SRC, 'paysuccess', 'js', 'index.js')
},
output: { //output 属性告诉 webpack 在哪里输出它所建立的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你能够经过在配置中指定一个 output 字段,来配置这些处理过程:
filename: '[name].js',
path: path.join(DIST),
publicPath: '/',
},
//loader 让 webpack 可以去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 能够将全部类型的文件转换为 webpack 可以处理的有效模块,本质上,webpack loader 将全部类型的文件,转换为应用程序的依赖图(和最终的 bundle)能够直接引用的模块。
//在更高层面,在 webpack 的配置中 loader 有两个目标:test 属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。use 属性,表示进行转换时,应该使用哪一个 loader。例如{ test: /\.txt$/, use: 'raw-loader' },当webpack编译器碰到「在 require()/import 语句中被解析为 '.txt' 的路径」时,对它打包以前,先使用 raw-loader 转换一下。”
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
'less': 'vue-style-loader!css-loader!postcss-loader!less-loader',
}
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/ //include 表示哪些目录中的 .js 文件须要进行 babel-loader;exclude 表示哪些目录中的 .js 文件不要进行 babel-loader
},
{
test: /\.(png|jpg|jpeg|gif|svg)$/,
loader: 'file-loader',
options: {
name: 'img/[name].[hash:7].[ext]'
}
},
{
test: /\.less$/,
use: [
{
loader: "style-loader" // creates style nodes from JS strings
},
{
loader: "css-loader" // translates CSS into CommonJS
},
{
loader: "postcss-loader"
},
{
loader: "less-loader" // compiles Less to CSS
}
]
},
{
test: /\.css$/,
loader: "style-loader!css-loader"
},
{
test: /\.(eot|woff|woff2|ttf)([\\?]?.*)$/,
loader: "file-loader"
},
]
},
resolve: {//解析模块的可选项
alias: { // 模块别名列表
'vue$': 'vue/dist/vue.esm.js',
}
},
};
复制代码
const path = require('path');
module.exports = {
build: {
env: require('./prod.env'),
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: '',
assetsPublicPath: './',
productionSourceMap: true,
productionGzipExtensions: ['js', 'css'],
bundleAnalyzerReport: process.env.npm_config_report
},
dev: {
env: require('./dev.env'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target: 'http://api.bilibili.com',
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
},
'/payplatform': {
target: 'http://pay.bilibili.com',
// target:'http://10.23.144.52:8101',
changeOrigin: true,
pathRewrite: {
'^/payplatform': '/payplatform'
}
},
'/userAuth': {
target: 'http://pay.bilibili.com',
// target:'http://10.23.145.204:80',
changeOrigin: true,
pathRewrite: {
'^/userAuth': '/userAuth'
}
},
'/paywallet': {
target: 'http://pay.bilibili.com',
// target:'http://10.23.144.14:8081',
changeOrigin: true,
pathRewrite: {
'^/paywallet': '/paywallet'
}
}
}
}
};
复制代码
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {
browsers: ["Android 4.0", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 10"]
} //若是package.json有配置browserslist,autoprefixer会读取package.json下的browserslist配置
}
}
复制代码
package.json配置browserslistjava
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
复制代码
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
复制代码