关于使用webpack搭建vue项目

646 阅读4分钟

我在操作的时候,参考的是这篇文章:webpack 搭建 vue 项目。也可以参考yugosun的这篇博客你也许不知道的vuejs:工欲善其事必先利其器。但下面有几点需要注意的地方:

1:在安装webpack的时候,如果你使用 webpack 4+ 版本,你还需要安装 CLI。 webpack的安装:

npm install  webpack --save-dev
或npm i  webpack --save-dev
或用yarn add webpack --save-dev

webpack-cli的安装:

npm install --save-dev webpack-cli。

由于上面是本地安装,不是全局安装,所以在使用webpack编译的时候,如果直接输入webpack不行的话,就需要在命令行中输入 ./node_modules/.bin/webpack,但是这样比较麻烦,可以使用npx webpack,npx可以找到webpack安装的地方。但npx这种方式不稳定,因为如果你的node在安装的时候,如果某个目录有空格,npx就无法正确找到。

另外关于yarn和npm的区别,可以参考这篇文章:yarn vs npm:你需要知道的

2:安装了vue之后,修改main.js文件里的内容,还要在index.html文件中,向body里面新加一个id为app的div,即

<div id="app">{{msg}}</div>

3:在使用webpack编译的时候,会报错,所以还要安装@babel/core即 npm install --save-dev @babel/core

同时还要在配置文件中加上resolve:alias的配置

 resolve: {
    alias: {
   'vue$': 'vue/dist/vue.esm.js' // 'vue/dist/vue.common.js' for webpack 1
    }
}

4:文章中还有其他loader以及plugin的使用。其中webpack-dev-server很好用。我们在实际开发中需要将代码部署在server中,而不是在浏览器中直接打开文件。此时我们需要使用webpack的 webpack-dev-server 。它为我们提供了一个简单的web服务器,并且能够实时重新加载(live reloading)。另外可以在package.json的scripts中添加一个script脚本,可以直接运行开发服务器(dev server):

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev":"webpack-dev-server --open",
    "build": "webpack"
},
这样直接在终端输入npm run dev代替webpack-dev-server。

5:npm init会生成package.json,npm install会根据package.json文件去下载安装项目所依赖的包等。

6:由于我们在开发环境和生产环境所需要的构建目标差异很大。我们通常建议为每个环境编写彼此独立的 webpack 配置。我们将使用一个名为 webpack-merge 的工具。具体可以参考webpack生产环境构建之配置。也可以直接引入通用的配置文件,使用...,如下面是在开发环境中引入了通用的配置文件webpack.base.config.js

var base = require("./webpack.base.config.js");
module.exports = {
    ...base,
    mode: "development",
    devtool: "inline-source-map",
    devServer: {
        contentBase: "./dist"
    },
    module: {
        rules: [
        ...base.module.rules,
        {
            test: /\.css$/i,
            use: ["style-loader", "css-loader"]
         }
    ]
    }
};

7:在使用npm或者yarn安装依赖的时候,遇到了两个类似的后缀--save-dev和-dev。查阅了很多资料,大家一般都是这样解释的:

--save:将保存配置信息到pacjage.json。默认为dependencies节点中。

--dev:将保存配置信息devDependencies节点中。

--save-dev:将保存配置信息到pacjage.json的devDependencies节点中。

dependencies:运行时的依赖,发布后,即生产环境下还需要用的模块。打包时会将其打包进去。

devDependencies:开发时的依赖。里面的模块是开发时用的,发布时用不到它。打包时不计算在内。 可以参考回答1, 回答2,回答3

所以,所有安装的webpack的loader和pligin,都使用--save-dev即可,用户不需要。而像我们项目中所依赖的vue,需要使用,就不能用--save-dev,而是用--save。

8:理解webpack中filename里的hash的作用,即如果我们在webpack.config.js的配置文件中,这样设置出口文件的名字,filename:[name][contenthash].js,那么在dist的目录下,生成的文件就是main.x.js。这里的x是一串hash数字,这有什么作用呢?

当我们每次去请求访问一个页面的时候,如果每次都要从服务器上把需要的所有文件都请求过来,有时速度会很慢。而且有时候之前已经访问过,内容缓存在本地了,而且这次请求的内容也并没有发生变化,但还是要重新去服务器获取。

使用了hash命名的话,会避免这个问题。即如果css或者js文件有更新改变的话,文件的命名是会发生变化的。所以当改了的话,在使用引入的地方也会有所改变,下次加载会更新,而不是使用本地缓存的。如果没有改变,再次请求的时候,就会使用缓存(这个缓存是http协议中规定的,浏览器必须支持),会直接从本地缓存中读取该文件,节省了时间。但注意index.html页面是不会缓存的,如果首页缓存了话,就无法实时获得更新了。

9:学习到了一个新的知识:热部署。简单的来说就是只想局部刷新修改了的地方,并不是全局刷新。要用到HotModuleReplacementPlugin,即启用热替换模块(Hot Module Replacement),也被称为 HMR。但在webpack的官网上建议:永远不要在生产环境(production)下启用 HMR,另外这些只是实验性内容,以后可能会被弃用。

10:这是一篇关于node,npm的文章,Node.js 包管理器 NPM 讲解

11:这是一篇掘金上点赞数很高的关于使用webpack去搭建vue开发环境:面试官:自己搭建过vue开发环境吗?

12:如果在部署项目的时候,最后输入输入一系列的命令,我们可以创建一个脚本如deploy.sh,直接执行这个脚本sh deploy.sh。

13:yugosun的一系列博客:你也许不知道的vuejs 值得推荐一看。

掘金之路从此开启