webpack4.0从零开始单页(多页)应用配置 (一)javascript
经过webpack运行起的项目若是不对图片资源作处理是不会加载到文件的。
例:咱们在src目录下添加一个image
目录而且放入一张图片在里面:
且在style.css文件加入以下代码:css
html, body{ height: 100%; background-color: red; background-image: url('./image/yangmi.jpg') }
执行npm run dev
发现并不会如期那样,界面上呈现图片。且报以下错误
提示已经很智能了,须要安装loader解析此类文件。html
安装:npm install --save-dev file-loader url-loader
vue
moude
配置,因此在moude
下的规则配置若是就能加上图片了{ test: /\.jpg|\.png|\.gif|\.jpeg|\.svg/, use: { loader: 'url-loader', options: { limit: 8192 //将小于8kb的图片 转为base64, 这样就会减小发送http的请求提升性能 } } }
再次执行,npm run dev
;java
项目中可能会加入各类字体库,如今除了svg
,咱们用得比较多的就是iconfont
了因此这里咱们拿iconfont
举例:咱们在iconfont
图标库里导出图标,并将放在src
目录下命名为font
:node
webpack.config.js
添加配置以下:webpack
{ test: /\.(woff|woff2|eot|ttf|otf)$/, use: { loader:'url-loader' } }
并在main.js
文件引入iconfont.css
并添加一个名为iconauth
的名字并执行npm run dev
以下: git
安装: npm install vue --save
npm install --save-dev vue-loader
github
webpack.config.jsweb
{ test: /\.vue$/, use: { loader: 'vue-loader' } }
main.js
import Vue from 'vue'; import App from './app.vue' new Vue({ el: '#app', render: h => h(App) });
执行npm run dev
编译报错:
<font color="#b20000">vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options.</font>
因此须要再安装:npm install --save-dev vue-template-compiler
关于vue-template-compiler 的定义 ,其github描述以下 :
This package can be used to pre-compile Vue 2.0 templates into render functions to avoid runtime-compilation overhead and CSP restrictions. In most cases you should be using it with vue-loader, you will only need it separately if you are writing build tools with very specific needs.
翻译以下 :
此包可用于将Vue 2.0模板预编译为呈现函数,以免运行时编译开销和CSP限制。 在大多数状况下,您应该将它与vue-loader一块儿使用,若是您正在编写具备特定需求的构建工具,则只须要单独使用它;
因此不知道的人很容易将vue-template-compiler遗忘,不过跟着处理一个一个报错就好了,,,哈哈~
再次执行npm run dev
:
what?
平常天天问本身,我哪儿作错了,我知道了我必定改 ╥﹏╥!
在github上看到了别人的回答:,多是由于v15还不太稳定的缘由,因此将其回到vue-loader@^14.2.2版本就好了,
npm install --save-dev vue-loader@^14.2.2
都知道解决ES6都是经过babel进行编译的,因此安装babel相关插件:
`npm install babel-core babel-loader babel-preset-env babel-preset-stage-0 babel-preset-stage-1 babel-preset-stage-2 babel-preset-stage-3
--save-dev`
在项目根目录下建立.babelrc
{ "presets": [ "env", "stage-0", "stage-1", "stage-2", "stage-3" ], "plugins": [ "transform-runtime" ] }
新增webpack.config.js
配置
{ test: /\.js$/, exclude: /node_modules/, use: { loader: "babel-loader" } }
安装:咱们在项目开发中并非全部的语法都会用到,因此添加babel-plugin-transform-runtime将用到的会自动打包到项目中npm i babel-plugin-transform-runtime --save-dev
.babelrc配置
{ "presets": [ "env", "stage-0", "stage-1", "stage-2", "stage-3" ], "plugins": [ [ "transform-runtime", { "polyfill": false } ] ] }
将开发环境的配置和生产环境的配置放在不一样目录更加有利于阅读,且不用在同一目录 下写不少判断去区分,因此在根目录下新建webpack.dev.config.js
和 webpack.prod.js
;
修改package.json
{ script: { "dev": "webpack-dev-server --development --config webpack.dev.js", "build": "webpack --config webpack.prod.js --production" } }
引入webpack-merge
npm install --save-dev webpack-merge
webpack.dev.js添加入代码
const Merge = require('webpack-merge'); const baseWebpackConfig = require('./webpack.config'); const path = require('path'); console.log(process.env.NODE_ENV); module.exports = Merge(baseWebpackConfig, { devServer: { contentBase: path.join(__dirname, 'dist'),// 服务器资源的根目录,不写的话,默认为bundle.js hot: true, //启用热加载 host: 'localhost', port: 8800,//端口号 compress: true, // 服务器资源采用gzip压缩 },//经过node起一个本地服务器,webpack-dev-server完成一些代理,mock数据热加载等功能 mode: 'development' });
webpack.prod.js 添加以下代码
const Merge = require('webpack-merge'); const baseWebpackConfig = require('./webpack.config'); module.exports = Merge(baseWebpackConfig, { mode: 'production' });
到这里基本上能够运行于项目了,后期会讲到若是优化一些项,好比提取屡次引用问题,自动添加css前缀等!