内容简介:上一节中讲了零配置也可以跑起打包js的操作,但是在实际项目中,不只是那么简单的打包,需要自定义配置打包的入口、输出的出口文件。现在就开始我们的配置文件,新增目录如下:webpack.config.js
上一节中讲了零配置也可以跑起打包js的操作,但是在实际项目中,不只是那么简单的打包,需要自定义配置打包的入口、输出的出口文件。
配置文件
现在就开始我们的配置文件,新增目录如下:
lesson-02 |- node-modules |- package.json |- package-lock.json |- /src |- index.js |- index.html + |- webpack.config.js 复制代码
webpack.config.js
const path = require('path') module.exports = { mode: 'development', entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } } 复制代码
上面配置中,mode选项就是我们的打包模式,上一节讲过的。
entry 就是打包的入口文件,值是一个路径。
output 就是打包的输出配置项,
filename 是最终要输出的js文件名
path 是输出到什么目录下,使用Nodejs的内置核心模块path,设置成绝对路径。
package.json
{ "name": "lesson-02", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "npx webpack --config webpack.config.js" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "webpack": "^4.30.0", "webpack-cli": "^3.3.0" } } 复制代码
在scripts 选项中新增dev选项,用于npm运行的命令。
--config webpack.config.js
是设置webpack配置的参数项,运行webpack命令时,会读取此配置文件。
现在我们运行命令,如下:
npm run dev Version: webpack 4.30.0 Time: 153ms Built at: 2019-04-21 12:19:07 Asset Size Chunks Chunk Names bundle.js 3.8 KiB main [emitted] main Entrypoint main = bundle.js [./src/index.js] 28 bytes {main} [built] 复制代码
会在dist目录下生成了bundle.js文件,对应的就是我们配置文件的配置文件。
资源加载器(loaders)
1. 加载CSS
webpack打包css,需要对应的加载器才能打包,否则会报错,安装加载器,如下:
npm i style-loader css-loader -D 复制代码
webpack.config.js
const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + 'style-loader', + 'css-loader' + ] + } + ] + } }; 复制代码
在配置文件中,新增了module选项,webpack 根据正则表达式,来确定应该查找哪些文件,并将其提供给指定的 loader。在这种情况下,以 .css 结尾的全部文件,都将被提供给 style-loader 和 css-loader。
在src下新增style.css文件,目录如下:
lesson-02 |- node-modules |- package.json |- package-lock.json |- /src + |- style.css |- index.js |- index.html + |- webpack.config.js 复制代码
style.css
html,body{ background: red; } 复制代码
修改index.js
import './style.css' console.log('Hello World!'); 复制代码
再次运行:
npm run dev > lesson-02@1.0.0 dev C:\Users\Qin\Desktop\js-demo\webpack4-lesson\lesson-02 > npx webpack --config webpack.config.js Hash: c146e67d4287c2ce96f5 Version: webpack 4.30.0 Time: 437ms Built at: 2019-04-21 12:31:42 Asset Size Chunks Chunk Names bundle.js 23.6 KiB main [emitted] main Entrypoint main = bundle.js [./node_modules/css-loader/dist/cjs.js!./src/style.css] 176 bytes {main} [built] [./src/index.js] 52 bytes {main} [built] [./src/style.css] 1.06 KiB {main} [built] + 3 hidden modules 复制代码
运行完成后,会将style.css打包进bundle.js内。
在浏览器中打开index.html,发现body背景颜色变成了红色,说明打包成功!!
2. 加载sass/scss
借助sass-loader、dart-sass,dart-sass将sass/scss转成浏览器可以解析的css代码。
安装:
npm i sass-loader dart-sass -D 复制代码
修改:webpack.config.js
const path = require('path') module.exports = { mode: 'development', entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ { test: /\.(css|scss|sass)$/, use: [ + { loader: 'style-loader' }, + { loader: 'css-loader' }, + { + loader: 'sass-loader', + options: { + implementation: require('dart-sass') + } + } ] }, { test: /\.(png|svg|jpg|gif)$/, loader: 'file-loader', options: { name: '[path]/[name].[ext]', }, } ] } } 复制代码
新增index.scss
lesson-02 |- node-modules |- package.json |- package-lock.json |- /src |- style.css + |- index.scss |- index.js |- index.html |- webpack.config.js 复制代码
index.scss
body { &{ background-color: yellow; } #box { background-repeat: no-repeat; } } 复制代码
在index.js内引入
import './style.css' import './index.scss' console.log('Hello World!'); 复制代码
运行
npm run dev 复制代码
如果成功打包,打开index.html就能看到scss内的样式。
3. 加载图片
现在我们在style.css加入如下样式:
style.css
html,body{ background: red; } + #box { + width: 200px; + height: 200px; + background-image: url(./F.png); + } 复制代码
修改index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>配置文件、资源加载器(loaders)</title> </head> <body> + <div id="box"></div> <script src="./dist/bundle.js"></script> </body> </html> 复制代码
再次运行命令:
npm run dev > lesson-02@1.0.0 dev C:\Users\Qin\Desktop\js-demo\webpack4-lesson\lesson-02 > npx webpack --config webpack.config.js Hash: 2adcd84d84a2ec8223c1 Version: webpack 4.30.0 Time: 401ms Built at: 2019-04-21 12:44:34 Asset Size Chunks Chunk Names bundle.js 25.3 KiB main [emitted] main Entrypoint main = bundle.js [./node_modules/css-loader/dist/cjs.js!./src/style.css] 452 bytes {main} [built] [./src/F.png] 177 bytes {main} [built] [failed] [1 error] [./src/index.js] 52 bytes {main} [built] [./src/style.css] 1.06 KiB {main} [built] + 4 hidden modules ERROR in ./src/F.png 1:0 Module parse failed: Unexpected character '�' (1:0) You may need an appropriate loader to handle this file type. (Source code omitted for this binary file) @ ./src/style.css (./node_modules/css-loader/dist/cjs.js!./src/style.css) 4:41-59 @ ./src/style.css @ ./src/index.js npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! lesson-02@1.0.0 dev: `npx webpack --config webpack.config.js` npm ERR! Exit status 2 npm ERR! npm ERR! Failed at the lesson-02@1.0.0 dev script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Qin\AppData\Roaming\npm-cache\_logs\2019-04-21T04_44_34_802Z-debug.log 复制代码
发现报错了,错误提示:您可能需要适当的加载程序来处理此文件类型。
其实是缺少图片加载器,现在我们去安装它。
安装
需要安装file-loader
npm i file-loader -D 复制代码
修改 webpack.config.js
const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, + { + test: /\.(png|svg|jpg|gif)$/, + loader: 'file-loader', + options: { + name: '[path]/[name].[ext]', + } + } ] } }; 复制代码
运行命令:
npm run dev > lesson-02@1.0.0 dev C:\Users\Qin\Desktop\js-demo\webpack4-lesson\lesson-02 > npx webpack --config webpack.config.js Hash: d33708d90a7ea8fc12b2 Version: webpack 4.30.0 Time: 449ms Built at: 2019-04-21 13:35:16 Asset Size Chunks Chunk Names bundle.js 25.2 KiB main [emitted] main src//F.png 416 bytes [emitted] Entrypoint main = bundle.js [./node_modules/css-loader/dist/cjs.js!./src/style.css] 452 bytes {main} [built] [./src/F.png] 56 bytes {main} [built] [./src/index.js] 52 bytes {main} [built] [./src/style.css] 1.06 KiB {main} [built] + 4 hidden modules 复制代码
运行完成后,打开index.html,发现图片成功加载了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- SpringBoot配置加载顺序
- golang 加载ini风格配置文件
- 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置
- web.xml的加载过程配置详解
- Laravel Config—— 配置文件的加载与源码解析
- 在运行时热加载Prometheus的配置信息
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。