webpack基本配置

 

一、新建项目

 

 

二、包管理管理项目

npm init -y
// 当创建的项目根目录名称是中文或者包含中文,就不能使用 -y 命令
// 直接使用 npm init 之后会让你手写项目名称

  {
    "name": "webpack",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
  }

//  生成了 package.json 文件,该文件集中管理了项目中所用到的包

 

三、安装webpack

cnpm install webpack -g
cnpm install webpack-cli -g

  

四、webpack.config.js  配置文件

在项目根目录新建  webpack.config.js  文件。先进行一些基础的配置

//  由于webpack是基于node进行构建的,所以,webpack配置文件中,任何合法的node代码都是可以识别的

const path = require('path'); // 当以命令行形式运行webpack 或者 webpack-dev-server 时,没有提供要打包的文件入口和出口文件,
// 就会检查项目根目录中的配置文件,并读取这个文件,就可以拿到这个配置对象,根据这个对象进行打包 module.exports = { entry:'./src/main.js',
  // entry:path.resolve(__dirname,'./src/main.js'), output:{ path:path.resolve(__dirname,'dist'), filename:'output.bundle.js' }, mode:'development' } // 这里首先配置了项目打包的入口文件,出口文件,打包的模式

配置完成后在控制台运行命令:webpack   就可以进行打包了,可以看到dist文件夹下面生成了output.bundle.js文件

 

五、打包完成后,可以在index.html文件中引用打包好的js文件

//  main.js   文件
console.log('ok');


//  index.html   文件
<script src="../dist/output.bundle.js"></script>

//  运行index.html  打开控制台,可以看到输出了OK

 

六、webpack-dev-server

现在我们每修改一次代码,就需要重新运行一次,怎样才能自动运行打包呢?

这里需要安装一个工具  webpack-dev-server  

cnpm install webpack-dev-server -D

//  -D 的方式会将这个包安装后放到package.json中的devDependencies里面

这里安装了之后会有一个提示:

peerDependencies WARNING webpack-dev-server@* requires a peer of webpack@^4.0.0 but none was installed
// webpack-dev-server 依赖于webpack,需要进行安装

注意上面我们已经使用过cnpm  install  webpack -g命令来安装webpack,这与cnpm install webpack -D是不一样的,前者安装可以使我们在控制台运行webpack相关命令,后者安装包,用包管理工具进行管理,运行命令之前可以看一下package.json中的devDependencies里面是没有webpack的

cnpm install webpack -D
cnpm install webpack-cli -D

此时的package.json文件中:

 安装好包之后还需要在package.json中添加脚本:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --open --port 3000 --contentBase src --hot"
  },

dev    表示当运行命令行 npm  run  dev  时,局相当于运行它后面的命令
--open  自动打开
--port  3000  指定端口号3000
--contentBase  src  指定资源的路径为 src 文件夹
--hot   开启热更新

 

七、运行 npm run dev

会发现此时会报错,找不到output.bundles.js文件

 

 

 

 webpack托管了我们的资源,托管的目录为根路径,那么端口号3000之后就可以跟上output.bundles.js文件,所以问题出在了index.html中script标签中的src值。

 

 

解决方法为:

1、将src的值改为  src="/output.bundles.js"

2、将原来的script标签注释掉,使用HtmlWebpackPlugin在内存上生成一个一模一样的页面,会自动将output.bundles.js注入到页面。

 

八、html-webpack-plugin

1、安装:

cnpm install --save-dev html-webpack-plugin -D

  

2、在webpack.config.js中进行配置

const path = require('path');
// 在内存中,根据指定的模板页面,生成一份内存中的首页,同时自动把
// 打包好的output.bundles.js注入到页面底部
// 配置插件需要在对象中挂载一个plugins节点
const htmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'output.bundle.js'
    },
    mode:'development',
    plugins:[  // 所有webpack插件的配置节点
        new htmlWebpackPlugin({
            // 指定模板文件路径
            template:path.resolve(__dirname,'./src/index.html'),
            // 设置生成的内存页面的名称
            filename:'index.html'
        })
    ]
}

  

3、运行

成功输出了 OK 

 

九、css样式打包---loader 

//  新增css 文件夹,index.css文件
html,body{
    margin: 0;
    padding: 0;
    background-color: #fff;
}


//   main.js  文件,引入样式文件

import  './css/index.css'

运行之后会报错:npm  run  dev 

 

 1、安装:

cnpm  install  style-loader  --save-dev -D
cnpm install css-loader --save-dev -D

  

2、配置:

const path = require('path');
// 在内存中,根据指定的模板页面,生成一份内存中的首页,同时自动把
// 打包好的output.bundles.js注入到页面底部
// 配置插件需要在对象中挂载一个plugins节点
const htmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'output.bundle.js'
    },
    mode:'development',
    plugins:[  // 所有webpack插件的配置节点
        new htmlWebpackPlugin({
            // 指定模板文件路径
            template:path.resolve(__dirname,'./src/index.html'),
            // 设置生成的内存页面的名称
            filename:'index.html'
        })
    ],
    module:{  // 配置所有第三方loader模块
        rules:[  // 第三方模块的匹配规则
            {  // 处理css文件的loader
                test:/\.css$/,
                use:['style-loader','css-loader'] 
            }
        ]
    }
}

  

此时的package.json文件:

 

 

 可以运行成功了,那么less文件呢?

同样的先安装相应的loader:

cnpm install --save-dev less-loader less -D

  

{
    test:/\.less$/,
    use:['style-loader', 'css-loader', 'less-loader']  
}

  

同样的还有sass文件;

cnpm install sass-loader node-sass --save-dev -D

  

{
    test:/\.sass$/,
    use:['style-loader', 'css-loader', 'sass-loader']
}

  

注意:在安装loaders时,可以在每一个loader后面加上@latest,这表示安装最新的包,有时如果包不是最新的,会报错;还要的情况下安装了最新的包也不行,可以试试@next,这表示安装的是已经开发好但还没有对外发布的。

 

posted @ 2019-10-20 21:03  1220x  阅读(221)  评论(0编辑  收藏  举报