一、初始化webpack

(文件名不能有中文字符、大写字母,否则会报错)貌似是这样的
npm init -y
npm i webpack webpack-cli -S

1-1 新建webpack.config.js

1-2 修改package.json文件

1-3vue-webpack打包 - 图1

"build":"webpack --config webpack.config.js"

1-3 初次打包

在根目录下新建src文件夹/index.js文件
在webpack.config.js文件中键入

  1. const path = require('path');
  2. const config = {
  3. entry:path.join(__dirname,'src/index.js'),// 在根目录下新建src文件夹/index.js文件
  4. output:{
  5. /* 打包的文件名 */
  6. filename:"bundle.js",
  7. /* 打包文件的输出目录 */
  8. path:path.join(__dirname,'dist')
  9. },
  10. mode:"development"
  11. }
  12. module.exports = config;

npm run build

二、配置plugins

npm i html-webpack-plugin -S
npm i clean-webpack-plugin -S
在webpack.config.js中键入 写在const config={}里面

  1. html-webpack-plugin
  2. //在dist目录下自动生成html,让打包的js文件自动插入
  3. const HtmlWebpackPlugin = require('html-webpack-plugin');
  4. plugins:[
  5. ...
  6. new HtmlWebpackPlugin({
  7. title:"webpack测试"
  8. })
  9. ]
  10. clean-webpack-plugin
  11. //每次打包之前会将dist目录下的文件清除
  12. const { CleanWebpackPlugin } = require('clean-webpack-plugin');
  13. plugins:[
  14. new CleanWebpackPlugin()
  15. ]

三、webpack-server

//写代码的时候就可以看到效果
npm i webpack-dev-server -S
npm i cross-env -S

3-1 配置package.json

  1. "scripts": {
  2. "build": "cross-env NODE_ENV=production webpack --config webpack.config.js",
  3. "serve":"cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js"
  4. }

3-2 配置webpack.config.js
is(isDev)写在const config={}后面 中间不能加逗号分隔!

  1. const isDev = process.env.NODE_ENV == 'development'
  2. if(isDev){
  3. config.devServer ={
  4. host:'localhost',
  5. port:8080,
  6. /* 错误是否显示在界面上 */
  7. overlay:{
  8. errors:true
  9. },
  10. /* 是否进行热更新 */
  11. hot:true
  12. }
  13. }

npm run serve

四、loader

//处理.vue .css .png|jpg
npm i css-loader style-loader -S
npm i vue-loader vue vue-template-compiler -S
npm i file-loader -S

4-1 配置webpack.config.js

  1. const {VueLoaderPlugin} = require('vue-loader');
  2. const config = {
  3. plugins:[
  4. new VueLoaderPlugin()
  5. ],
  6. module:{
  7. rules:[
  8. {
  9. test:/\.css$/,
  10. use:[
  11. 'style-loader',
  12. 'css-loader'
  13. ]
  14. },
  15. {
  16. test:/\.vue$/,
  17. use:'vue-loader'
  18. },
  19. {
  20. test:/\.png|jpg|gif$/i,
  21. use:'file-loader'
  22. }
  23. ]
  24. },
  25. mode:"development"
  26. }

4-2 配置src/index.js

根目录下新建一个assets文件夹,index.css文件
在src文件夹里新建一个App.vue文件

  1. import Vue from 'vue'
  2. import '../assets/index.css';
  3. import App from './App.vue';
  4. const root = document.createElement("div");
  5. document.body.append(root)
  6. new Vue({
  7. render:h=>h(App)
  8. }).$mount(root)
  9. npm run serve //查看效果

五、请求网络数据

//App.vue
npm i axios -S

  1. <template>
  2. <div class="container">
  3. <div class="item" v-for="item of musics" :key="item.id"> // 结构渲染数据
  4. <img :src="item.coverUrl" class="pic" alt="">
  5. <p>{{item.name}}</p>
  6. <p>{{item.radio.category}}</p>
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. import axios from 'axios' //引入axios
  12. export default {
  13. name: "App",
  14. data(){
  15. return {
  16. musics:[]
  17. }
  18. },
  19. mounted() {
  20. var url = "http://192.168.14.49:3000/top/playlist?cat=日语";
  21. axios.get(url).then(res=>{
  22. this.musics = res.data.playlists
  23. })
  24. }
  25. };
  26. </script>
  27. <style scoped>
  28. .container{
  29. width: 1000px;
  30. margin-right: auto;
  31. margin-left: auto; //css样式
  32. }
  33. .item p:last-child{
  34. color: gray;
  35. display: inline-block;
  36. border: 1px solid gray;
  37. margin-left: 80px;
  38. height: 25px;
  39. font-size: 15px;
  40. }
  41. .item p:nth-of-type(1){
  42. width: 250px;
  43. margin-left: 10px;
  44. }
  45. </style>