美文网首页
webpack+vue 从0到1 创建web前端项目

webpack+vue 从0到1 创建web前端项目

作者: 付小影子 | 来源:发表于2020-09-22 17:30 被阅读0次

效果图

3333.png

项目源码

创建项目,初始化package.json

1.进入D盘,创建文件vue-todo,使用vsCode 打开该文件
2.打开vsCode 终端(导航栏terminal-new terminal)
3.在终端 输入 npm init -y
4.自动生成 package.json

package.json 文件说明

"dev": "webpack-dev-server --config ./build/webpack.dev.js"
开发环境打包 脚本,终端运行:npm run dev

webpack-dev-server 开发环境的一个热更新
--config ./build/webpack.dev.js 指定 dev模式下 webpack 配置文件

{
  "name": "vue_todo", //项目名称
  "version": "1.0.0", //项目版本号
  "description": "", //项目描述
  "main": "webpack.config.js", //webpack 配置文件
  "dependencies": { //项目依赖
    "element-ui": "^2.13.2",
    "stylus": "^0.54.8",
    "stylus-loader": "^3.0.2",
    "vue": "^2.6.12",
    "vue-loader": "^15.9.3",
    "vue-template-compiler": "^2.6.12",
    "webpack": "^4.44.2",
    "webpack-cli": "^3.3.12"
  },
  "devDependencies": { //开发环境项目 依赖
    "autoprefixer": "^10.0.0",
    "clean-webpack-plugin": "^3.0.0",
    "css-loader": "^4.3.0",
    "file-loader": "^6.1.0",
    "html-webpack-plugin": "^4.5.0",
    "postcss-loader": "^4.0.2",
    "style-loader": "^1.2.1",
    "url-loader": "^4.1.0",
    "webpack-dev-server": "^3.11.0",
    "webpack-merge": "^5.1.4"
  },
  "scripts": { //webpack 打包脚本 npm run dev/build(开发环境,正式环境)
   ./build/webpack.dev.js指定webpack 配置文件路径
    "dev": "webpack-dev-server --config ./build/webpack.dev.js",
    "build": "webpack --config ./build/webpack.pro.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

安装webpack

在命令行执行 npm install webpack webpack-cli -D
install:安装
-D:安装开发环境依赖,--save-dev的简写
安装webpack

项目基本目录

1111.png
2222.png

创建 index.html

根目录下的index.html 是个模板文件,打包的时候,会根据还这个模板内容,生成新的HTML文件,放到打包输出的目录下,这边展示的是打包输出的HTML文件。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>从零开始打造todo应用</title>
    <link
      rel="stylesheet"
      href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"
    />
  </head>
  <body>
    <div>hello shadow,hello world</div>
    <div id="app"></div>
    <script src="bundle.js"></script>//打包的时候生成的,模板文件没有
  </body>
</html>

安装vue ,创建app.vue文件

安装vue
安装vue有多种方式,这边选择npm 方式。
在用 Vue 构建大型应用时推荐使用 NPM 安装[1]。NPM 能很好地和诸如 webpackBrowserify 模块打包器配合使用。同时 Vue 也提供配套工具来开发单文件组件

命令行 执行 npm install vue 安装vue

app.vue文件内容

<template>
  <div>
    <h1>TodoList</h1>

    <input
      type="text"
      placeholder="请输入内容"
      v-model="content"
      maxlength="10"
    />
    <el-button @click="addItem">添加</el-button>

    <ul>
      <li v-for="(item, index) in dataList">{{ item }}</li>
    </ul>
  </div>
</template>
<script>
import img from "../assets/images/111.png";
import "../assets/styles/main.css";
// import "../assets/styles/global.styl";

//@import url("//unpkg.com/element-ui@2.13.2/lib/theme-chalk/index.css");

export default {
  name: "app",
  created() {
    console.log(img);
  },
  data() {
    return {
      content: "",
      dataList: ["shadow1", "shadow1", "shadow3"],
    };
  },
  methods: {
    addItem() {
      if (this.content === "") return;
      this.dataList.push(this.content);
      this.content = "";
    },
  },
};
</script>
<!-- lang="stylus" -->
<!-- scoped 样式只影响当前文件 -->
<style scoped>
h1 {
  color: pink;
  font-size: 50px;
  /* transform: translate(100px, 100px); */
}
input {
  display: inline;
  font-weight: 500;
  padding: 12px 20px;
  font-size: 14px;
  border-radius: 4px;
}

li:nth-of-type(odd) {
  color: #00ccff;
}
</style>

创建main.js,挂载index.html 连接app.vue

项目引入了element-UI 组件库,需要先安装
安装element-UI组件库

//创建vue根实例
import Vue from "vue";
//导入 APP组件
import App from "./app.vue";
//导入element-ui 组件库  
import ElementUI from "element-ui";

Vue.use(ElementUI);
//创建vue根实例
//方式1
// new Vue({
//   el: "#app",
//   components: {
//     //组件名:组件对象
//     App: App,
//   },
//   template: "<App/>", //组件名
// });

//挂载APP组件
//方式2
new Vue({
  el: "#app",
  render: (h) => h(App),
});

webpack配置

webpack 官方文档
为了让浏览器能够正确解析,需要使用webpack将我们的源代码进行打包
从 webpack v4.0.0 开始,可以不用引入一个配置文件。然而,webpack 仍然还是高度可配置的。在开始前你需要先理解四个核心概念

  • 入口(entry)
  • 输出(output)
  • loader
  • 插件(plugins)

配置文件参数说明

mode 指定开发环境
entry 指定打包入口文件
output打包出口文件配置
devtool source map 功能,将编译后的代码映射回原始源代码。用来定位问题,如果一个错误来自于 b.js,source map 就会明确的告诉你(只有开发模式需要),有多个模式可选devtool

devServer实时更新变化配置,不用重新编译webpack-dev-server

module.rule 配置打包规则,webpack 只能打包js文件,如果要打包其他文件就需要借助于loader。对于后缀为vue,css等不能打包,图片也不能打包,需要添加相应loader,vue-loader,file-loader,css-loader等依赖打包。loader就是专门用于打包特定文件的处理程序webpack-loader
打包资源

plugins webpack 有着丰富的插件接口(rich plugin interface)。webpack 自身的多数功能都使用这个插件接口。这个插件接口使 webpack 变得极其灵活。webpack-plugin

完整代码示例

//导入path模块
const path = require("path");
//导入 HTML插件
const HtmlWebpackPlugin = require("html-webpack-plugin"); //通过 npm 安装
//引入clean-webpack-plugin 每次打包前的时候,都删除dist目录,生成新的文件
//es6结构语法
const { CleanWebpackPlugin } = require("clean-webpack-plugin"); //通过 npm 安装

//webpack热加载 https://www.webpackjs.com/guides/hot-module-replacement/
const webpack = require("webpack");

//引入vue-loader插件 固定写法
const VueLoaderPlugin = require("vue-loader/lib/plugin");

module.exports = {
  //development 开发模式 production:生产模式
  mode: "development",
  //打包入口文件
  entry: "./src/main.js",

  //source map 功能,将编译后的代码映射回原始源代码。定位问题如果一个错误来自于 b.js,source map 就会明确的告诉你。

  devtool: "inline-source-map",

  //devServer 配置,实时更新变化配置
  devServer: {
    //指定服务器根目录
    contentBase: "./dist",
    //自动打开浏览器
    open: true,
    //开启热模块替换
    hot: true,
  },
  //打包的出口文件
  output: {
    filename: "bundle.js",
    //当前目录下,创建dist文件,打包生成文件名称bundle
    path: path.resolve(__dirname, "dist"),
  },
  //配置打包规则
  module: {
    rules: [
      //打包vue文件
      {
        test: /\.vue$/,
        loader: "vue-loader",
      },
      //打包图片
      {
        test: /\.(png|jpg|gif)$/,
        loader: "file-loader",
      },
      //低于指定大小的图片,以base64格式打包图片
      // {
      //   test: /\.(png|jpg|gif)$/,
      //   use: [
      //     {
      //       loader: "url-loader",
      //       options: {
      //         //小于 8k的时候 使用base64打包图片,超过时候 使用fileLoader
      //         limit: 2048,
      //       },
      //     },
      //   ],
      // },
      //打包css文件
      {
        test: /\.css$/,
        use: [{ loader: "style-loader" }, { loader: "css-loader" }],
      },
      {
        test: /\.styl(us)?$/,
        use: [
          "vue-style-loader",
          "css-loader",
          "postcss-loader",
          "stylus-loader",
        ],
      },
    ],
  },
  //插件配置,放置插件的实例对象
  plugins: [
    // 请确保引入这个插件来施展魔法
    new VueLoaderPlugin(),
    //以当前目录下的 index.html为模板,生成dist目录下的index.html
    new HtmlWebpackPlugin({ template: "./index.html" }),
    new CleanWebpackPlugin(),
    new webpack.HotModuleReplacementPlugin(),
  ],
  resolve: {
    alias: {
      vue: "vue/dist/vue.js",
    },
    extensions: [".js", "*", ".css"], //现在就没问题了
  },
};

webpack 配置正式环境和开发环境

因为正式环境和开发环境的很多配置是相同的,所以提取公共代码,合并配置
1.安装webpack-merge,命令行输入 ** npm install -D webpack-merge**
2.创建 build文件夹,在此目录下创建webpack.base.js,webpack.dev.js,webpack.pro.js

基类配置 webpack.base.js

//导入path模块
const path = require("path");
//导入 HTML插件
const HtmlWebpackPlugin = require("html-webpack-plugin"); //通过 npm 安装
//引入clean-webpack-plugin 每次打包前的时候,都删除dist目录,生成新的文件
//es6结构语法
const { CleanWebpackPlugin } = require("clean-webpack-plugin"); //通过 npm 安装

//引入vue-loader插件 固定写法
const VueLoaderPlugin = require("vue-loader/lib/plugin");

module.exports = {
  //打包入口文件
  entry: "./src/main.js",

  //打包的出口文件
  output: {
    filename: "bundle.js",
    //当前目录下,创建dist文件,打包生成文件名称bundle
    path: path.resolve(__dirname, "../dist"),
  },
  //配置打包规则
  module: {
    rules: [
      //打包vue文件
      {
        test: /\.vue$/,
        loader: "vue-loader",
      },
      //打包图片
      {
        test: /\.(png|jpg|gif)$/,
        loader: "file-loader",
      },
      //低于指定大小的图片,以base64格式打包图片
      // {
      //   test: /\.(png|jpg|gif)$/,
      //   use: [
      //     {
      //       loader: "url-loader",
      //       options: {
      //         //小于 8k的时候 使用base64打包图片,超过时候 使用fileLoader
      //         limit: 2048,
      //       },
      //     },
      //   ],
      // },
      //打包css文件
      {
        test: /\.css$/,
        use: [{ loader: "style-loader" }, { loader: "css-loader" }],
      },
      {
        test: /\.styl(us)?$/,
        use: [
          "vue-style-loader",
          "css-loader",
          "postcss-loader",
          "stylus-loader",
        ],
      },
    ],
  },
  //插件配置,放置插件的实例对象
  plugins: [
    // 请确保引入这个插件来施展魔法
    new VueLoaderPlugin(),
    //以当前目录下的 index.html为模板,生成dist目录下的index.html
    new HtmlWebpackPlugin({ template: "./index.html" }),
    new CleanWebpackPlugin(),
  ],
  resolve: {
    alias: {
      vue: "vue/dist/vue.js",
    },
    extensions: [".js", "*", ".css"], //现在就没问题了
  },
};

开发环境配置文件webpack.dev.js

//1.导入 公共配置
const baseConfig = require("./webpack.base.js");
//2.导入 merge
//const merge = require("webpack-merge");
const { merge } = require("webpack-merge");

//3.配置 开发环境特有的参数
//webpack热加载 https://www.webpackjs.com/guides/hot-module-replacement/
const webpack = require("webpack");

const devConfig = {
  //development 开发模式 production:生产模式
  mode: "development",

  //source map 功能,将编译后的代码映射回原始源代码。定位问题 如果一个错误来自于 b.js,source map 就会明确的告诉你。
  devtool: "inline-source-map",

  //devServer 配置,实时更新变化配置
  devServer: {
    //指定服务器根目录
    contentBase: "./dist",
    //自动打开浏览器
    open: true,
    //开启热模块替换 只有dev需要
    hot: true,
  },

  //插件配置,放置插件的实例对象
  plugins: [new webpack.HotModuleReplacementPlugin()],
};

//合并代码
module.exports = merge(baseConfig, devConfig);

正式环境配置文件webpack.pro.js

// 用于生产环境配置

//1.导入 公共配置
const baseConfig = require("./webpack.base.js");

//2.导入 merge
const { merge } = require("webpack-merge");

//3.添加当前环境 特有的配置
const devConfig = {
  //development 开发模式 production:生产模式
  mode: "production",
};

//4.合并代码
module.exports = merge(baseConfig, devConfig);

相关文章

  • webpack+vue 从0到1 创建web前端项目

    效果图 项目源码 创建项目,初始化package.json 1.进入D盘,创建文件vue-todo,使用vsCod...

  • 从 0 到 1 的 WEB 前端项目(一)

    一个项目的启动,首先应该是从需求分析开始;没有需求就没有项目 这里我们先略过需求,进行环境的构建 需要什么 一个全...

  • 从 0 到 1 的 WEB 前端项目(二)

    没有需求就没有项目 上篇说到搭好环境跑出一个实例出来,然后怎么开发呢?开发离不开需求;从技术上来说就是书写** j...

  • 从 0 到 1 的 WEB 前端项目(三)

    了解环境,了解工具的最好办法就是去对应的官网读导航;然后获取别人的总结以便于快速了解;最后写出自己的总结。最重要的...

  • webpack

    从 0 到 1 搭建 webpack2+vue2 自定义模板详细教程 最详细的 webpack+vue 构建指南。...

  • webpack+vue

    webpack+vue创建简单项目 https://blog.csdn.net/winnergod/article...

  • tomcat-- Intellij下web项目部署到tomcat

    Intellij 部署web项目到本地tomcat 1. 首先创建一个web项目(module) 2. 配置tom...

  • web components 从0到1

    简单例子 定义 Web Components 是一套不同的技术,允许您创建可重用的定制元素(它们的功能封装在您的代...

  • 从0到1创建湘军

    #一起读书成长会# Day 6/30《曾国藩传》湘军为什么牛气? 曾国藩为人处事,表面上看起来保守,但是在...

  • webpack+vue项目创建

    npm install -g vue-cli //全局安装vue-cl...

网友评论

      本文标题:webpack+vue 从0到1 创建web前端项目

      本文链接:https://www.haomeiwen.com/subject/xkiwyktx.html