搭建一个属于自己的webpack config(-)

前期准备

环境说明

  • mac 10.12.6
  • node v8.8.1
  • npm 5.4.2

全局安装下webpack、webpack-dev-server

npm i webpack webpack-dev-server -g

对应版本

  • webpack@2.7.0
  • webpack-dev-server@2.9.5

初始化

	mkdir reactStudio
cd reactStudio
npm init -y

新建webpack.config.js 文件

const path = require('path')
module.exports={
entry:{
main:'./src/index.js' //编译的入口代码。对应的key就是编译出来的name
},
output:{
filename: 'js/[name].js',//编译出来的文件名称
publicPath: '/',//提供对外提供服务的地址
path:path.resolve(__dirname,'dist')//编译后存放文件的绝对地址
}
}

设置webpack 的入口文件为src/index.js 以及 编译后的文件名称和位置

设置npm scripts

{
"name": "reactStudio",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "webpack-dev-server --content-base public",//这里指定serve 对应的文件价
"build": "webpack -p",生产环境的编译
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

这样运行 npm start 等于启动项目。npm run build 编译项目。通过这样的配置可以约定俗成一套命令,为以后自动化代码检测、测试、部署提供支持。

好了,我们新建一个src文件夹,再创建一个index.js,内容如下

alert('Hello Webpack')

以及新建public文件夹,创建index.html,内容如下

<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>测试</title>
</head>
<body>
<div id="main">Hello webpack</div>
<script src="js/main.js"></script>
</body>
</html>

这里的js引用路径和webpack 配置文件中output.publicPath 相关,详细说明查看webpack 配置说

这时候在当前文件夹的terminal 下执行npm start 就应该可以看到alert了。

下一步我们去支持es6语法

我们先修改src/index.js

let obj = {a:4,b:5}
let newObj = {...obj,c:7,b:8};
console.log(newObj)

如果你还在运行npm start,你应该可以看到

webpack: Compiling...
Hash: webpack: Failed to compile.
68167a5bd4e0b1a8e487
Version: webpack 2.7.0
Time: 8ms
Asset Size Chunks Chunk Names
js/main.js 323 kB 0 [emitted] [big] main
chunk {0} js/main.js (main) 318 kB [entry] [rendered]
[2] ./src/index.js 267 bytes {0} [built] [failed] [1 error]
[15] (webpack)/hot nonrecursive ^\.\/log$ 160 bytes {0} [built]
+ 23 hidden modules ERROR in ./src/index.js
Module parse failed: /Users/rancho/Documents/studio/react-pass-value/src/index.js Unexpected token (2:14)
You may need an appropriate loader to handle this file type.
| let obj = {a:4,b:5}
| let newObj = {...obj,c:7,b:8};
| console.log(newObj)
@ multi (webpack)-dev-server/client?http://localhost:8081 ./src/index.js

错误的意思是在解析src/index.js 文件时,出现未知的符号,我们需要加载一个合适的loader 去处理这种文件。我们知道文件类型没有变化,只是语法错误,这时候我们就要引用babel的编译了

修改webpack.config.js 增加一个module 节点

module: {
rules: [
{
test: /\.(js|jsx)$/,//支持js and jsx 后缀
include: path.resolve(__dirname, 'src'),//只编译src里面的文件里面的js
use: [
{
loader: 'babel-loader',
options: {
babelrc: false,
presets: [
'babel-preset-env',
'babel-preset-stage-0',
],
plugins: ['transform-runtime'],//这样就不用引用babel-polyfill
cacheDirectory: true,
},
},
]
} ]
}

rule的include 和exclude 非必须,但是设置会优化webpack 编译的速度

babel-plugins 有增加一个 transform-runtime 这样就不用引用babel-polyfill。babel-polyfill 扩展很多原始的方法,具体查看 babel-polyfill

安装相关依赖

npm i babel-core babel-plugin-transform-runtime babel-preset-stage-0 babel-preset-env

重启命令后可以在页面的console 中看到

{a:4,b:8,c:7}

这里我们设置preset 为 babel-preset-env ,是因为 这个preset 可以根据你支持的环境去提供你需要的plugin,就不需要特别去配置 babel-preset-es2015, babel-preset-es2016, and babel-preset-es2017 这些了。详细配置查看.

支持react 的语法

新建一个src/Hello.jsx 文件

import React,{Component} from 'react'

export default class HelloReact extends Component{
render(){
return (
<div>就是爱你!</div>
)
}
}

在src/index.js 引用并渲染出来

import React from 'react'
import ReactDOM from 'react-dom';
import Hello from './Hello.jsx'
let obj = {a:4,b:5}
let newObj = {...obj,c:7,b:8};
console.log(newObj) ReactDOM.render(<Hello />, document.getElementById('main'));

在webpack.config.js 里面增加 babel-preset-react

presets: [
'babel-preset-env',
'babel-preset-react',
'babel-preset-stage-0',
],

在此过程可能遇到的问题。

  1. import Hello from './Hello.jsx' 必须要加后缀jsx。否则会提示文件没有找到。解决方案在webpack.config.js 加入
resolve: {
extensions: [
'.js', '.jsx'//设置webpack 解析后缀名称,这样webpack就会自动寻找有该后缀的文件。
]
},
  1. 有时候引用地址可能写错大小写,但是提示内容不够直观。比如·import React,{Component} from 'React'· 这时候也会报错。可以添加
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
plugins: [
new CaseSensitivePathsPlugin()
],

这样错误信息就更加清晰了

 [CaseSensitivePathsPlugin] `/node_modules/React/index.js` does not match the corresponding path on disk `react`.

有问题可以评论交流

搭建一个属于自己的webpack config(-)的更多相关文章

  1. 从零开始搭建一个简单的基于webpack的vue开发环境

    原文地址:https://segmentfault.com/a/1190000012789253?utm_source=tag-newest 从零开始搭建一个简单的基于webpack的react开发环 ...

  2. 搭建一个webpack微服务器

    [前言]:因为最近在vue2.0的时候用到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的“收尾工作”——即打包,而没有把它纳入到项目开发的“主体过程”中来 ...

  3. 手动搭建一个webpack+react笔记

    { "name": "lottery", "version": "1.0.0", "description&q ...

  4. 一步步从零开始用 webpack 搭建一个大型项目

    开篇 很多人都或多或少使用过 webpack,但是很少有人能够系统的学习 webpack 配置,遇到错误的时候就会一脸懵,不知道从哪查起?性能优化时也不知道能做什么,网上的优化教程是不是符合自己的项目 ...

  5. 使用webpack搭建一个多页应用

     一.前言 最近需要为公司的活动写8个左右的移动端分享页面,有比较多的页面是公用的,如果用传统的方式来写的话,对于公用的代码抽取,css代码的压缩都是比较麻烦的,所以选择了webpack来搭建一个基本 ...

  6. webpack+vue+koa+mongoDB,从零开始搭建一个网站

    github 地址 https://github.com/wangxiaoxi... webpakc+vue的搭建1.新建项目文件夹(see-films);2.npm init //初始化项目3.搭建 ...

  7. 关于自己配置有关webpack.config.js和vue项目搭建相关步骤

    ## Webpack的配置和使用 ### 安装 1. 全局安装 ``` npm install webpack -g ``` 2. 本地安装 ``` npm install webpack -D `` ...

  8. 二:搭建一个webpack3.5.5项目:建立项目的webpack配置文件

    第一步: npm init -y [初始文件] npm info webpack / bower info webpack[查看版本,用bower的时候要先 npm install bower] np ...

  9. 真刀实战地搭建React+Webpack+Express搭建一个简易聊天室

    一.前面bb两句 因为自惭(自残)webpack配置还不够熟悉,想折腾着做一个小实例熟悉.想着七夕快到了,做一个聊天室自己和自己聊天吧哈哈.好了,可以停止bb了,说一下干货. 二. 这个项目能学到啥? ...

随机推荐

  1. Java基础总结--Java编程环境变量配置

    1.jdk--bin--都是命令行程序(图形化是对命令行的封装)eg javac&java执行javac必须切换到其所在目录--太麻烦---想在任意目录下使用要执行一个命令--先在当前目录下找 ...

  2. 双十一临近,怎样让买家流畅地秒杀? ——腾讯WeTest独家开放电商产品压测服务

    WeTest 导读 十一月临近,一年一度的电商大戏"双十一"又将隆重出场,目前各大商家已经开始各类优惠券的发放,各类大促的商品表单也已经提前流出,即将流入各个用户的购物车中. 作为 ...

  3. idea中的汉语注释出现乱码的解决方案

    日记 - idea中的汉语注释出现乱码的解决方案 我是个idea的忠实用户,新公司的项目都是用eclipse做的,通过svn拉下代码后发现,注释的内容里,中文内容都是乱码.问过项目负责人,说可能是GB ...

  4. 一起来学linux:NFS服务器搭建

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } nfs是network file system的缩写,作用在于让不同的网络,不同的机 ...

  5. gops - Go语言程序查看和诊断工具

    想必 Java 的开发者没有不知道或者没用过 jps 这个命令的,这个命令是用来在主机上查看有哪些 Java 程序在运行的. 我刚用 Go 语言程序的时候也很苦恼,我部署在公司服务器上的 Go 程序, ...

  6. SQL Server 2008 R2 企业版 MSDN原版

    经网友建议,提供常用试验用资源.以下软件或系统仅为完成本博客内的各种实验而提供下载. 所有软件.系统均为该软件发布方提供的原版文件,未经任何修改.破解等操作.使用目的仅限于学习.测试及实验,符合国家相 ...

  7. java 中 针对数组进行的工具类

    1.遍历数组的方法: public static void printfArray(int[] arr)  2. 获取数组中最大值: public static int getMax(int[] ar ...

  8. 关于 ElesticSearch 安装

    ElesticSearch windows 下安装步骤 1. 配置 JAVA_HOME 环境变量,因为作者是一个java开发人员,这是基本配置,就不多做赘述 2. 安装ElasticSearch 从官 ...

  9. C#中抽象类和接口的区别2

    1.接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性        抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性:       2. 下面分别从声明, ...

  10. python基础-------模块与包(二)

    sys模块.logging模块.序列化 一.sys模块 sys.argv           命令行参数List,第一个元素是程序本身路径 sys.exit(n)        退出程序,正常退出时e ...