webpack + loader 使用笔记

624 阅读2分钟

先睹为快

demo 地址点 这里

1. 准备一个 webpack_demo

  1. 创建 src 和 dist 文件夹
  2. 在 src 目录下创建 js 文件夹
  3. 在 js 文件夹下创建 module-1.js,module-2.js,app.js。
  4. css 用 scss 写,主要是为了体验一下 sass-loader

src 目录下

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>hello,webpack!</h1>
<script src="./js/bundle.js"></script>
</body>
</html>

main.scss

body{
  h1{
    color: red;
  }
}

module-1.js

function fn() {
    let a = 1;
    console.log(a)
}

export default fn;

module-2.js

function fn() {
    console.log(2)
}

export default fn;

app.js

webpack 一切都看成模块化,CSS 也当做一个模块引入进来。

import module1 from './module-1'
import module2 from './module-2'
import '../css/main.scss'

module1();
module2();
console.log('app.js');

dist 目录下

执行 cp src/index.html dist/index.html,拷贝一份 index.html 到 dist 目录下 。

2. 安装 webpack

webpack 安装地址

执行 npm install --save-dev webpack

执行 npm init,一路回车下去。

在 package.json 文件中发现 webpack 的版本号是 4.6.0,但相关的插件大多数支持的还都是 3.x 版本的,在官网查找 3.x 中比较新的版本号,于是在 package.json 文件中把版本号改成了 3.10.0。再次执行 npm install

在 webpack_demo 的路径下中执行 ./node_modules/.bin/webpack

说明已经安装成功了,接下来 GetStarted

在教程中点击 Using a Configuration,在工程中添加 webpack.config.js 文件,并把配置内容写进去。

配置文件提示,我们需要 src 和 dist 文件,并且在 src 里面有一个 index.js。根据我们的 demo ,作如下修改。

const path = require('path');

module.exports = {
  entry: './src/js/app.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist/js/')
  }
};

3. 安装 Babel Loader

Babel Loader 安装地址

执行 npm install babel-loader babel-core babel-preset-env webpack 安装 Babel Loader 。

接下来要点击 7.x branch 版本的教程。

因为我们安装的 webpack 版本是 3.x ,babel-loader 是 7.x ,babel-core 是 6.x。

4. 安装 Sass-Loader

node-sass

npm install node-sass

sass-loader

npm install sass-loader node-sass webpack --save-dev

官网中的 webpack.config.js

module.exports = {
	...
    module: {
        rules: [{
            test: /\.scss$/,
            use: [{
                loader: "style-loader" // creates style nodes from JS strings
            }, {
                loader: "css-loader" // translates CSS into CommonJS
            }, {
                loader: "sass-loader" // compiles Sass to CSS
            }]
        }]
    }
};

由于上面已经配过一次 webpack.config.js,现在只需要添加 rules 里面的选项即可。配置好的如下。

demo中的 webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/js/app.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist/js/')
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['env']
                    }
                }
            },
            {
                test: /\.scss$/,
                use: [{
                    loader: "style-loader" // creates style nodes from JS strings
                }, {
                    loader: "css-loader" // translates CSS into CommonJS
                }, {
                    loader: "sass-loader" // compiles Sass to CSS
                }]
            }
        ]
    }
};

"sass-loader" 把 sass 编译成 css。

"css-loader" 把 CSS 变成 JS 字符串。

"style-loader" JS 字符串创建 style 标签添加样式。

5. 运行 webpack

执行 ./node_modules/.bin/webpack ,并没有 CSS 生成,报错如下。

文档中默认了你已经安装了 style-loader 和 css-loader 。所以继续添加这两个 loader

npm install style-loader css-loader

再次执行 ./node_modules/.bin/webpack

效果

6. 后记

推荐 parcel, 虽然好用,但是有点年轻,可能报错没有相关的解决办法。