Webpack-搭建本地服务器 | 青训营笔记

246 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第11天

搭建本地服务器

webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现我们想要的让浏览器自动刷新显示我们修改后的结果。

不过它是一个单独的模块,在webpack中使用之前需要先安装它--对webpack提供开发时服务

  1. 安装:npm install --save-dev webpack-dev-server@2.9.1

devserver也是作为webpack中的一个选项,选项本身可以设置如下属性: contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,我们这里要填写./dist port:端口号 默认8080 inline:页面实时刷新 Boolean historyApiFallback:在SPA页面中,依赖HTML5的history模式

  1. 配置:webpack.config.js文件配置修改如下:
module.exports = {
    devServer : {
    contentBase : './dist',
    inline : true
  }
}

使用:webpack-dev-server 报错:在终端直接输入该命令,会报错,因为终端去全局找,而我们是在局部安装的 解决:node_modules/.bin/webpack-dev-server (可以 ./node_modules/.bin/webpack-dev-server报错,要换成反斜杠\(没试

  1. 命令映射:我们可以再配置另外一个scripts:
// package.json
{
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "dev" : "webpack-dev-server --open"
    // --open参数表示直接打开浏览器
  },
}



分离配置文件

  • 有些配置只在开发时使用,有些只在发布时使用,所以要分离配置文件

开发时和发布/编译时的配置进行分离

base.config.js: 公共配置

dev.config.js: 开发配置

prod.config.js: 发布配置

为了将配置文件合并一起,安装:npm install webpack-merge@4.1.5 --save-dev merge:合并

const {merge} = require("webpack-merge") 现在要这样2021-1-16 引入合并方法,查看源码后看到导出中含有merge,所以引入方式是 {merge} = require() 新版本要调用merge 方法 webpackMerge.merge()

// prod.config.js
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
const WebpackMerge = require('webpack-merge')
// 导入base.config
const baseConfig = require('./base.config')

module.exports = WebpackMerge(baseConfig,{
  plugins : [
    new UglifyjsWebpackPlugin(),
  ],
})
// 因为高版本webpack-merge导出的是mrege函数,且不是默认导出所以必须使用{merge}接收!


// dev.config.js
const WebpackMerge = require('webpack-merge')
// 导入base.config
const baseConfig = require('./base.config')

module.exports = WebpackMerge(baseConfig,{
  devServer : {
    contentBase : './dist',
    inline : true
  }
})

此时运行npm run build

报错:No configuration file found and no output filename configured via CLI option. A configuration file could be named 'webpack.config.js' in the current directory. 找不到配置文件webpack.config.js

解决: 在package,json的scripts添加--config ./build/prod.config.js 手动指定配置文件,而不是默认的

{
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config ./build/prod.config.js",
    "dev": "webpack-dev-server --open --config ./build/prod.config.js"
  },
}

打包后发现东西被打包在build文件夹下 因为之前我们在base.config.js文件中写了

  output : {
    path : path.resolve(__dirname,'dist'), 
    // path 通常是绝对路径
    // __dirname:指的是当前文件所在 文件夹 的绝对路径
    filename : 'bundle.js',
    // publicPath : 'dist/' // 以后涉及到url,都会自动在前面拼接dist/
  },

所以在build文件夹下创建了dist文件夹,修改:path : path.resolve(__dirname,'../dist'),