webpack 配置 vue 的单页面应用

一、什么是 webpack?

webpack 是基于 Node.js 静态资源的模块打包器。当用 webpack 打包时,它会从一个起点开始查找各个模块依赖关系,并且按照这些依赖关系把这些文件打成一个或者多个包;

二、为什么使用 webpack?

1.模块化,浏览器端的早期没有模块化,需要 js 文件只能通过 script 标签手动控制依赖管理这些 js 文件的引入顺序;而 webpack 可以通过模块化管理这些依赖;
2.自动编译 less、sass
3.可以把基于 JS 的扩展语言编译成 JS;
4.开发时配置代理解决开发环境跨域

三、安装

前提条件:在开始之前,请确保安装了 Node.js 的最新版本。使用 Node.js 最新的长期支持版本(LTS - Long Term Support),是理想的起步。使用旧版本,你可能遇到各种问题,因为它们可能缺少 webpack 功能以及/或者缺少相关 package 包。

推荐本地安装

对于大多数项目建议本地安装。这可以使我们在引入破坏式变更(breaking change)的依赖时,更容易分别升级项目。通常,webpack 通过运行一个或多个 npm scripts,会在本地 node_modules 目录中查找安装的 webpack:

  1. 创建 wbp-vue 项目目录(可以根据项目起名)

  2. 在 wbp-vue 中生成 package.json

npm init -y
  1. 在 wbp-vue 中安装 webpack
    npm install --save-dev webpack
  1. 在 wbp-vue 中安装 webpack-cli(如果你使用 webpack 4+ 版本,你还需要安装 CLI。)
    npm install --save-dev webpack-cli
四、用 webpack 配置 vue 的单页面应用

真实项目中我们不是单独使用 vue,而是结合 webpack等打包工具;因为 webpack 可以更方便的实现模块化,导入导出依赖。而且使用webpack配合 vue-loader,我们的组件可以写成 .vue 的文件。

  • 在 wbp-vue 中创建 src 目录(src 存放打包前源文件)
    • src 中创建 index.html
    • src 中创建 main.js(主入口文件)
    • src 中创建 components (components 存放 vue 组件)
  • 在 wbp-vue 中创建 webpack.config.js
1. 在 webpack.config.js 中配置如下:
let HtmlWebpackPlugin = require('html-webpack-plugin'); // 打包时用一下

// Vue + webpack 单页面应用需要安装: vue-loader  vue-template-compiler
let VueLoaderPlugin = require('vue-loader/lib/plugin'); // 引入 vue-loader plugin

module.exports = {
    entry: './src/main.js', // 配置打包入口
    output: {
        path: __dirname + './dist', // 一般输出目录都叫 dist 或者 build
        filename: 'bundle.js' // 打包输出的文件名
    },
    devtool: 'eval-source-map', 
    devServer: {
        contentBase: './src',
        port: 8001,
        open: true, // 自动启动浏览器
        inline: true, // 文件内容修改,浏览器自动刷新
        historyApiFallback: true, // 单页面应用切路由不刷新(history模式)
        proxy: {
          'api': {
              target: 'http://localhost:8000', // 和服务端同事联调时,你需要和服务端同事要开飞机的 ip 或者域名(再次确认端口,域名有可能不是用的80或443)
              changeOrigin: true, // target是域名的话,要设置为true
              secure: false // 不校验安全与否
          }
        }
    },

    // 配置 loader 
    module: {
        rules: [
            { // 配置 babel (把 ES67 转 ES5 , 把 JSX 转 JS)
                test: /\.js$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['env']
                    }
                },
                exclude: /node_modules/ // 不处理 node_modules 中的东西
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            },
            {
                test: /\.(png|jpg|gif|woff|ttf)$/,
                use: 'url-loader'
            },
            {
                test: /\.vue$/,
                use: 'vue-loader'
            }
        ]
    },

    plugins: [
      new HtmlWebpackPlugin({
        template: './src/index.html'
      }),
      new VueLoaderPlugin() // 除了上面配置 loader,这里还要用一个插件
    ]
};

2. 配置时需要安装
    npm install --save vue
    npm install --save vue-router
    npm install --save-dev webpack-dev-server 
    npm install --save-dev babel-core babel-loader@7.1.5 babel-preset-env
    npm install --save-dev css-loader style-loader
    npm install --save-dev less less-loader
    npm install --save-dev url-loader
    npm install --save-dev html-webpack-plugin
    npm install --save-dev vue-loader vue-template-compiler
3. 需要在 package.json 中的 scripts 对象中配置
  • “dev”: “webpack-dev-server”
  • “build”: “webpack”,
  • “cmdBuild”: “webpack-cli --entry ./app/main.js --output ./public/bundle.js”,
{
  "name": "wbp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack", // 需要配置
    "cmdBuild": "webpack-cli --entry ./app/main.js --output ./public/bundle.js", // 需要配置
    "dev": "webpack-dev-server" // 需要配置
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "vue": "^2.6.10",
    "vue-router": "^3.1.2"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-env": "^1.7.0",
    "css-loader": "^3.2.0",
    "html-webpack-plugin": "^3.2.0",
    "less": "^3.10.3",
    "less-loader": "^5.0.0",
    "style-loader": "^1.0.0",
    "url-loader": "^2.1.0",
    "vue-loader": "^15.7.1",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^4.39.3",
    "webpack-cli": "^3.3.7",
    "webpack-dev-server": "^3.8.0"
  }
}

npm run dev 在命令行中执行就可以跑起来了
npm run build 在命令行中执行就可以打包了

注意:修改webpack配置文件后如果是开发中,要重启 npm run dev ;如果生产环境,要重新打包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值