The way of Webpack learning (I.) -- Configure Webpack from zero(从零开始配置webpack)

本文详细介绍了如何使用Webpack3.10.0进行项目初始化、配置及JS文件打包流程。从创建package.json,定义npm script,安装Webpack,到构建JS工具函数,设置webpack.config.js,最终实现JS文件的打包输出。

学习之路基于webpack3.10.0,webpack4.0之后更新。

一:开始前的配置

1、初始化项目,其实就是新建一个package.json文件,后面的命令依赖里面的配置项。

npm init

2、修改npm script定义的任务,新增一项。

"scripts": {
    "start": "webpack --config webpack.config.js"
}

3、安装webpack

 npm i -D webpack@3.10.0

 注:--save --dev 和 --save的区别?

答:--save --dev是开发环境需要的包,添加到devDependencies里面。

--save是生产环境需要的包,添加到dependencies里面。

 

二:使用webpack打包Js文件

1、页面入口文件 index.html

<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <div id="app"></div>
  <!--导入 Webpack 输出的 JavaScript 文件-->
  <script src="./dist/bundle.js"></script>
</body>
</html>

2、JS 工具函数文件 show.js

// 操作 DOM 元素,把 content 显示到网页上
function show(content) {
  window.document.getElementById('app').innerText = 'Hello,' + content;
}

// 通过 CommonJS 规范导出 show 函数
module.exports = show;

3、JS 执行入口文件 main.js

// 通过 CommonJS 规范导入 show 函数
const show = require('./show.js');
// 执行 show 函数
show('Webpack');

4、Webpack 在执行构建时默认会从项目根目录下的 webpack.config.js 文件读取配置,所以你还需要新建它,其内容如下:

const path = require('path');

module.exports = {
  // JavaScript 执行入口文件
  entry: './main.js',
  output: {
    // 把所有依赖的模块合并输出到一个 bundle.js 文件
    filename: 'bundle.js',
    // 输出文件都放到 dist 目录下
    path: path.resolve(__dirname, './dist'),//path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。
  }
};

5、打包js文件

npm start

一切文件就绪,在项目根目录下执行 webpack 命令运行 Webpack 构建,你会发现目录下多出一个 dist目录,里面有个 bundle.js 文件, bundle.js 文件是一个可执行的 JavaScript 文件。




转载于:https://www.cnblogs.com/weihuan/p/9631799.html

<think>好的,我现在需要解决用户在使用npm start时遇到的缺少less-loader和stylus-loader模块的问题。用户之前已经遇到了缺少less-loader的问题,现在又遇到了stylus-loader的类似错误。首先,我应该回顾之前的解决方案,看看是否适用于stylus-loader的情况。 用户提供的引用内容显示他们的webpack.config.js配置可能比较基础,只处理了基本的入口、出口和压缩插件。这可能意味着他们还没有配置处理Less和Stylus文件的规则。因此,问题可能出在两个地方:依赖未安装和Webpack配置缺失。 首先,用户需要安装这两个loader以及它们的依赖。对于less-loader,已经知道需要安装less和less-loader。对于stylus-loader,同样需要安装stylus和stylus-loader。需要确保用户同时安装这些包,因为每个loader都有对应的预处理器依赖。 接下来,检查webpack.config.js中的module.rules部分,确保添加了处理.less和.styl文件的规则。用户之前的配置可能没有这些规则,所以需要指导用户正确添加,注意loader的顺序,因为Webpack是从右到左或从下到上执行loader的。例如,对于Less文件,顺序应该是less-loader -> css-loader -> style-loader。 另外,用户可能遇到版本兼容性问题。需要建议用户检查各loader和Webpack的版本是否兼容,推荐使用较新但稳定的版本。如果用户遇到版本冲突,可能需要指定特定版本安装。 还有可能用户在使用Create React App(CRA)这样的脚手架工具,这时候直接修改webpack.config.js可能无效,需要通过react-app-rewired或craco来覆盖配置。用户是否已经执行了eject?如果未eject,可能需要提醒他们使用第三方工具来修改配置。 此外,用户可能在安装依赖后没有清理缓存或node_modules,导致旧的缓存仍然存在,从而引发错误。因此,建议用户删除node_modules和缓存后重新安装依赖。 最后,应该总结步骤,并生成相关问题,帮助用户进一步排查可能的问题,比如如何处理同时支持多种预处理器、loader的作用,以及样式未生效的排查方法等。</think>--- ### 解决 `npm start` 报错 `Cannot find module 'stylus-loader' and 'less-loader'` --- #### **问题根源** 1. **依赖缺失** - `less-loader` 需要 `less` 作为运行时依赖 - `stylus-loader` 需要 `stylus` 作为运行时依赖 两者均未安装或安装不完整时,Webpack 无法解析 `.less` 和 `.styl` 文件[^1]。 2. **Webpack 配置缺失** 用户提供的 `webpack.config.js` 中未定义处理 `.less` 和 `.styl` 文件的规则(参考引用[1])。 --- #### **完整解决方案** ##### **步骤 1:安装所有依赖** 同时安装 `less-loader` 和 `stylus-loader` 及其依赖包: ```bash # 使用 npm npm install less less-loader stylus stylus-loader --save-dev # 使用 pnpm pnpm add less less-loader stylus stylus-loader -D ``` **关键点**: - `less` 和 `stylus` 是编译器,必须作为生产依赖(`--save`)或开发依赖(`--save-dev`)安装 - 若使用 TypeScript,需额外安装 `@types/stylus`(但非必须)[^2] --- ##### **步骤 2:补充 Webpack 配置** 在 `webpack.config.js` 的 `module.rules` 中添加以下规则: ```javascript module.exports = { module: { rules: [ // 其他规则... // 处理 .less 文件 { test: /\.less$/, use: [ 'style-loader', // 将 CSS 注入 DOM 'css-loader', // 解析 CSS 为 JS 模块 'less-loader' // 编译 Less → CSS(最后执行) ] }, // 处理 .styl/.stylus 文件 { test: /\.styl(us)?$/, use: [ 'style-loader', 'css-loader', 'stylus-loader' // 编译 Stylus → CSS ] } ] } }; ``` **配置验证要点**: 1. `test` 正则表达式需正确匹配文件扩展名(`.less` 和 `.styl/.stylus`) 2. Loader 顺序必须遵循 **从后往前执行** 原则(如 `less-loader` 在最后) 3. 若项目使用 `postcss-loader`,需插入到 `css-loader` 之前 --- ##### **步骤 3:检查版本兼容性** | 依赖包 | 推荐版本 | 核心依赖 | |---------------|-----------|-------------------| | webpack | ^5.89.0 | Node.js ≥ 14.15.0 | | less-loader | ^11.1.0 | less@^4.0.0 | | stylus-loader | ^7.1.0 | stylus@^0.58.0 | | css-loader | ^6.11.0 | webpack@^5.0.0 | | style-loader | ^3.3.3 | webpack@^5.0.0 | **强制安装指定版本**: ```bash pnpm add less@4.2.0 less-loader@11.1.0 stylus@0.58.0 stylus-loader@7.1.0 -D ``` --- ##### **步骤 4:清理缓存并重启** ```bash # 清理缓存和旧依赖 rm -rf node_modules/.cache rm -rf node_modules # 重新安装依赖 npm install # 或 pnpm install # 重启项目 npm start ``` --- #### **高级场景处理** 1. **Create React App (CRA) 项目** - **未 eject**:通过 `craco.config.js` 覆盖配置: ```javascript const { addBeforeLoader, loaderByName } = require("@craco/craco"); module.exports = { webpack: { configure: (webpackConfig) => { // 添加 less-loader addBeforeLoader(webpackConfig, loaderByName("css-loader"), { test: /\.less$/, use: ["style-loader", "css-loader", "less-loader"] }); // 添加 stylus-loader addBeforeLoader(webpackConfig, loaderByName("css-loader"), { test: /\.styl(us)?$/, use: ["style-loader", "css-loader", "stylus-loader"] }); return webpackConfig; } } }; ``` - **已 eject**:直接修改 `config/webpack.config.js`(风险较高)。 2. **路径别名问题** 若在样式文件中使用 Webpack 别名(如 `@import '~@/styles.less'`),需配置解析路径: ```javascript // webpack.config.js const path = require('path'); module.exports = { resolve: { alias: { '@': path.resolve(__dirname, 'src') } } }; ``` --- ### **相关问题** 1. Webpack 中如何配置同时支持 Sass、Less 和 Stylus? 2. `css-loader` 的 `modules: true` 选项有什么作用? 3. 使用 `stylus-loader` 时如何启用 Source Map? 4. Webpack 的 Loader 执行顺序为什么是反向的? [^1]: Webpack 的模块解析机制会逐级检查 `node_modules` 目录,缺失关键依赖时会立即抛出 `Cannot find module` 错误。 [^2]: `stylus-loader` 的运行时依赖关系较松散,但建议保持 `stylus` 版本在 0.58+ 以避免语法解析问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值