webpack使用教程 翻译自阮一峰(机翻)

原文https://github.com/ruanyf/webpack-demos#demo01-entry-file-source
这个仓库集合了一些webpack简单的demo。
这些demo风格简单明了,你将发现跟着这些案例学习webacpk这个强大的工具变得不费吹灰之力。

如何使用

首先,在全局环境中安装Webpackwebpack-dev-server

$ npm i -g webpack webpack-dev-server

然后将仓库克隆到本地并安装相关依赖

# Linux & Mac$ git clone git@github.com:ruanyf/webpack-demos.git
# Windows$ git clone https://github.com/ruanyf/webpack-demos.git
:
$ cd webpack-demos
$ npm install

现在,可以运行仓库中所有demo目录下的资源文件

$ cd demo01
$ webpack-dev-server

用你的浏览器访问 http://127.0.0.1:8080

前言:webpack是什么

webpack是一个前端构建系统类似于Grunt and Gulp.
它的功能有点类似于Browserify的模块包,但是它可以做的更多

$ browserify main.js > bundle.js
# 等价于
$ webpack main.js bundle.js

它的配置文件是webpack.config.js

// webpack.config.js
module.exports = {
  entry: './main.js',
  output: {
    filename: 'bundle.js'
  }
};

在有了webpack.config.js这个文件之后,你可以调用Webpack且不需要任何参数。

$ webpack

一些你应该知道的命令行选项

  • webpack– for building once for development(用于构建一个开发目录)
  • webpack -p– for building once for development(用于构建一个生产目录(压缩过的))
  • webpack --watch– for continuous incremental build(用于连续地构建)
  • webpack -d– to include source maps(展示映射关系)
  • webpack --colors– for making things pretty(用于美化展示的信息)

To produce a production ready application(为了产生生产准备的应用),你可以在package.json编写以下scripts字段

// package.json
{
  // ...
  "scripts": {
    "dev": "webpack-dev-server --devtool eval --progress --colors",
    "deploy": "NODE_ENV=production webpack -p"
  },
  // ...
}

Index


  1. Entry file
  2. Multiple entry files
  3. Babel-loader
  4. CSS-loader
  5. Image loader
  6. CSS Module
  7. UglifyJs Plugin
  8. HTML Webpack Plugin and Open Browser Webpack Plugin
  9. Environment flags
  10. Code splitting
  11. Code splitting with bundle-loader
  12. Common chunk
  13. Vendor chunk
  14. Exposing Global Variables
  15. Hot Module Replacement
  16. React router

Demo01:Entry file(入口文件) (资源)

Entry file(入口文件)将会被作为webpack读取并构造出bundle.js.
举例来说main.js就是一个(entry file)入口文件

// main.jsdocument.write('<h1>Hello World</h1>');

index.html

<html>
  <body>
    <script type="text/javascript" src="bundle.js"></script>
  </body>
<html>

webpack会根据webpack.config.js来构建出bundle.js

// webpack.config.js
module.exports = {
  entry: './main.js',
  output: {
    filename: 'bundle.js'
  }
};

启动服务器,访问 http://127.0.0.1:8080 .

$ webpack-dev-server

坑1

$ webpack-dev-server

运行代码出现以下错误意义不明

 http://localhost:8080/webpack-dev-server/
webpack result is served from /
content is served from C:\Users\umaru\demo\webpack-demos\demo01
Hash: 396f0bfb9d565b6f60f0
Version: webpack 1.14.0
Time: 44ms

ERROR in Entry module not found: Error: Cannot resolve 'file' or 'directory' ./main.js in C:\Users\umaru\demo\webpack-demos\demo01
webpack: bundle is now VALID.
$ webpack-dev-server
$ webpack --display-error-details//带上参数可以找出详细的错误信息
Hash: 396f0bfb9d565b6f60f0
Version: webpack 1.14.0
Time: 31ms

ERROR in Entry module not found: Error: Cannot resolve 'file' or 'directory' ./main.js in C:\Users\umaru\demo\webpack-demos\demo01
resolve directory
  C:\Users\umaru\demo\webpack-demos\demo01\main.js is not a directory (directory default file)
  C:\Users\umaru\demo\webpack-demos\demo01\main.js\package.json doesn't exist (directory description file)
resolve file
  C:\Users\umaru\demo\webpack-demos\demo01\main.js.webpack.js doesn't exist
  C:\Users\umaru\demo\webpack-demos\demo01\main.js.web.js doesn't exist
  C:\Users\umaru\demo\webpack-demos\demo01\main.js.js doesn't exist
  C:\Users\umaru\demo\webpack-demos\demo01\main.js.json doesn't exist
  resolve result C:\Users\umaru\demo\webpack-demos\demo01\main.js
  C:\Users\umaru\demo\webpack-demos\demo01\package.json (directory description file): SyntaxError: Unexpected token / in JSON at position 0

原因是json解析错误在第0行有注释json文件不认任何注释
修改package.json

{
  "scripts": {
    "dev": "webpack-dev-server --devtool eval --progress --colors",
    "deploy": "NODE_ENV=production webpack -p"
  }
}

再运行
$ webpack-dev-server

 http://localhost:8080/webpack-dev-server/
webpack result is served from /
content is served from C:\Users\umaru\demo\webpack-demos\demo01
Hash: fc2be4484e3356d26c56
Version: webpack 1.14.0
Time: 74ms
    Asset     Size  Chunks             Chunk Names
bundle.js  1.43 kB       0  [emitted]  main
chunk    {0} bundle.js (main) 40 bytes [rendered]
    [0] ./main.js 40 bytes {0} [built]
webpack: bundle is now VALID.

没有报错


Demo02: Multiple entry files (多入口文件)(资源)

多入口文件是合法的,它通常被应用于一个多页应用app

// main1.js
document.write('<h1>Hello World</h1>');
// main2.js
document.write('<h2>Hello Webpack</h2>');

index.html

<html>
  <body>
    <script src="bundle1.js"></script>
    <script src="bundle2.js"></script>
  </body>
<html>

webpack.config.js

module.exports = {
  entry: {
    bundle1: './main1.js',
    bundle2: './main2.js'
  },
  output: {
    filename: '[name].js'
  }
};

Demo03: Babel-loader(编译器可以将es6语法转成低版本[如es5语法]提高兼容性) (资源)

loaders(加载器)是可以转换您的应用程序资源(更多信息)文件的一个预处理器,例如Babel-loader可以将JSX / ES6文件转换为JS文件。官方文档有一个完整的 loaders(加载器)列表

main.jsx是一个 JSX 文件.

const React = require('react');
const ReactDOM = require('react-dom');

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.querySelector('#wrapper')
);

index.html

<html>
  <body>
    <div id="wrapper"></div>
    <script src="bundle.js"></script>
  </body>
</html>

webpack.config.js

module.exports = {
  entry: './main.jsx',
  output: {
    filename: 'bundle.js'
  },
  module: {
    loaders:[
      {
        test: /\.js[x]?$/,
        exclude: /node_modules/,
        loader: 'babel-loader?presets[]=es2015&presets[]=react'
      },
    ]
  }
};

webpack.config.js中,module.loaders字段用于分配加载程序。 上面的代码片段使用babel-loader,它还需要插件 babel-preset-es2015babel-preset-react对 ES6和React进行transpile(转义)。 您也可以使用其他方式设置babel配置选项。

module: {
  loaders: [
    {
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'babel',
      query: {
        presets: ['es2015', 'react']
      }
    }
  ]
}

demo3 package.json

{
  "devDependencies": {
    "babel-core": "^6.21.0",
    "babel-loader": "^6.2.10",
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-react": "^6.16.0",
    "react": "^15.4.2",
    "react-dom": "^15.4.2"
  }
}



作者:菲龍探雲
链接:https://www.jianshu.com/p/cd123afa196a
來源:简书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack是一个现代化的JavaScript模块打包工具。它能够将多个模块打包成单个文件,以便在浏览器中加载。以下是一个简单的Webpack使用教程: 1. 安装Webpack:首先,你需要在你的项目中安装Webpack。你可以使用npm或yarn来安装Webpack。在命令行中运行以下命令来进行安装: ``` npm install webpack webpack-cli --save-dev ``` 2. 创建配置文件:在项目根目录下创建一个名为 `webpack.config.js` 的文件。在这个文件中,你可以配置Webpack的各种选项,例如入口文件、输出路径、加载器和插件等。 ```javascript const path = require('path'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: 'babel-loader' }, // 添加其他加载器和规则 ] }, // 添加插件和其他配置 }; ``` 3. 创建入口文件:在项目中创建一个名为 `index.js` 的入口文件。这个文件是Webpack打包的起点。 4. 配置加载器:Webpack使用加载器来处理不同类型的文件。例如,Babel加载器可以将ES6语法转换为ES5语法,使其能够在旧版浏览器中运行。在上面的配置文件中,我们使用了 `babel-loader` 来处理JavaScript文件。 ``` npm install babel-loader @babel/core @babel/preset-env --save-dev ``` 然后,在配置文件中添加以下规则: ```javascript module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: 'babel-loader' }, // 添加其他加载器和规则 ] } ``` 5. 运行Webpack:在命令行中运行以下命令来打包你的项目: ``` npx webpack ``` 这将根据配置文件中的设置,将入口文件及其依赖打包成一个或多个文件,并将它们输出到指定的路径。 这只是一个简单的Webpack使用教程Webpack还有很多其他功能和配置选项。你可以参考Webpack的官方文档来了解更多详细信息和高级用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值