npm + webpack +react
2016-07-05 11:47
561 查看
踏上征途
开始使用 Webpack 非常简单,我会展示给你看使用它的一个简单的项目。第一步,为你的项目新建一个文件夹,然后输入
npm init,然后填写相关问题。这样会为你创建了
package.json,不用担心填错,你可以之后修改它。
安装 Webpack
接下来我们安装 Webpack,我们要把它安装在本地,然后把它作为项目依赖保存下来。这样你可以在任何地方编译(服务端编译之类的)。输入npm i wepack --save-dev。如果你想运行它,就输入
node_modules/.bin/webpack。
目录结构
项目的目录结构长这样:/app
main.js
component.js
/build
bundle.js (自动创建)
index.html
package.json
webpack.config.js
我们会使用 Webpack 在我们的
/app里来自动创建
bundle.js。接下来,我们来设置
webpack.config.js。
设置 Webpack
Webpack 的配置文件长这样:webpack.config.js
var path = require('path'); module.exports = { entry: path.resolve(__dirname, 'app/main.js'), output: { path: path.resolve(__dirname, 'build'), filename: 'bundle.js', }, };
运行你的第一个编译
现在我们有了一个最简单的配置,我们需要有什么东西去编译,让我们开始一个经典的Hello World,设置
/app像这样:
app/component.js
'use strict'; module.exports = function () { var element = document.createElement('h1'); element.innerHTML = 'Hello world'; return element; };
app/main.js
'use strict'; var component = require('./component.js'); document.body.appendChild(component());
现在在你的命令行运行
webpack,然后你的应用会开始编译,一个
bundle.js文件就这样出现在你的
/build文件夹下,需要在
build/下的 index.html 去启动项目。
build/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <script src="bundle.js"></script> </body> </html>
运行应用
只要双击 index.html 或者设置一个 Web 服务指向build/文件夹。
设置 package.json
scripts
npm是一个非常好用的用来编译的指令,通过
npm你可以不用去担心项目中使用了什么技术,你只要调用这个指令就可以了,只要你在
package.json中设置
scripts的值就可以了。
在这个案例中我们把编译步骤放到
npm run build中是这样:
npm i webpack --save- 如果你想要把 Webpack 作为一个项目的开发依赖,就可以使用
--save-dev,这样就非常方便地让你在开发一个库的时候,不会依赖工具(但不是个好方法!)。
把下面的内容添加到
package.json中。
"scripts": { "build": "webpack" }
现在你可以输入
npm run build就可以编译了。
当项目越发复杂的时候,这样的方法会变得越来越有效。你可以把所有复杂的操作隐藏在
scripts里面来保证界面的简洁。
不过潜在的问题是这种方法会导致如果你使用一些特殊的指令的时候只能在 Unix 环境中使用。所以如果你需要考虑一些未知的环境中的话,那么 gulp-webpack 会是一个好的解决方案。
注意 NPM 会找到 Webpack,
npm run会把他临时加到
PATH来让我们这个神奇的命令工作。
工作流
如果需要一直输入npm run build确实是一件非常无聊的事情,幸运的是,我们可以把让他安静的运行,让我们设置
webpack-dev-server。
设置 webpack-dev-server
第一步,输入 npm i webpack-dev-server --save,此外,我们需要去调整
package.jsonscripts 部分去包含这个指令,下面是基本的设置:
package.json
{ "scripts": { "build": "webpack", "dev": "webpack-dev-server --devtool eval --progress --colors --hot --content-base build" } }
当你在命令行里运行
npm run dev的时候他会执行 dev 属性里的值。这是这些指令的意思:
webpack-dev-server- 在 localhost:8080 建立一个 Web 服务器
--devtool eval- 为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号
--progress- 显示合并代码进度
--colors- Yay,命令行中显示颜色!
--content-base build- 指向设置的输出目录
总的来说,当你运行
npm run dev的时候,会启动一个 Web 服务器,然后监听文件修改,然后自动重新合并你的代码。真的非常简洁!
访问 http://localhost:8080 你会看到效果。
浏览器自动刷新
当运行 webpack-dev-server 的时候,它会监听你的文件修改。当项目重新合并之后,会通知浏览器刷新。为了能够触发这样的行为,你需要把你的 index.html 放到build/文件夹下,然后做这样的修改:
build/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <script src="http://localhost:8080/webpack-dev-server.js"></script> <script src="bundle.js"></script> </body> </html>
我们需要增加一个脚本当发生改动的时候去自动刷新应用,你需要在配置中增加一个入口点。
var path = require('path'); module.exports = { entry: ['webpack/hot/dev-server', path.resolve(__dirname, 'app/main.js')], output: { path: path.resolve(__dirname, 'build'), filename: 'bundle.js', }, };
就是这样!现在你的应用就可以在文件修改之后自动刷新了。
默认环境
在上面的例子中我们创建了 index.html 文件来获取更多的自由和控制。同样也可以从 http://localhost:8080/webpack-dev-server/bundle 运行应用。这会触发一个默认的你不能控制的 index.html ,它同样会触发一个允许iFrame中显示重合并的过程。引入文件
模块
Webpack 允许你使用不同的模块类型,但是 “底层”必须使用同一种实现。所有的模块可以直接在盒外运行。ES6 模块
import MyModule from './MyModule.js';
CommonJS
var MyModule = require('./MyModule.js');
AMD
define(['./MyModule.js'], function (MyModule) { });
理解文件路径
一个模块需要用它的文件路径来加载,看一下下面的这个结构:/app
/modules
MyModule.js
main.js (entry point)
utils.js
踏上征途
开始使用 Webpack 非常简单,我会展示给你看使用它的一个简单的项目。第一步,为你的项目新建一个文件夹,然后输入
npm init,然后填写相关问题。这样会为你创建了
package.json,不用担心填错,你可以之后修改它。
安装 Webpack
接下来我们安装 Webpack,我们要把它安装在本地,然后把它作为项目依赖保存下来。这样你可以在任何地方编译(服务端编译之类的)。输入npm i wepack --save-dev。如果你想运行它,就输入
node_modules/.bin/webpack。
目录结构
项目的目录结构长这样:/app
main.js
component.js
/build
bundle.js (自动创建)
index.html
package.json
webpack.config.js
我们会使用 Webpack 在我们的
/app里来自动创建
bundle.js。接下来,我们来设置
webpack.config.js。
设置 Webpack
Webpack 的配置文件长这样:webpack.config.js
var path = require('path'); module.exports = { entry: path.resolve(__dirname, 'app/main.js'), output: { path: path.resolve(__dirname, '/build'), filename: 'bundle.js', }, };
运行你的第一个编译
现在我们有了一个最简单的配置,我们需要有什么东西去编译,让我们开始一个经典的Hello World,设置
/app像这样:
app/component.js
'use strict'; module.exports = function () { var element = document.createElement('h1'); element.innerHTML = 'Hello world'; return element; };
app/main.js
'use strict'; var component = require('./component.js'); document.body.appendChild(component());
现在在你的命令行运行
webpack,然后你的应用会开始编译,一个
bundle.js文件就这样出现在你的
/build文件夹下,需要在
build/下的 index.html 去启动项目。
build/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <script src="bundle.js"></script> </body> </html>
运行应用
只要双击 index.html 或者设置一个 Web 服务指向build/文件夹。
设置 package.json
scripts
npm是一个非常好用的用来编译的指令,通过
npm你可以不用去担心项目中使用了什么技术,你只要调用这个指令就可以了,只要你在
package.json中设置
scripts的值就可以了。
在这个案例中我们把编译步骤放到
npm run build中是这样:
npm i webpack --save- 如果你想要把 Webpack 作为一个项目的开发依赖,就可以使用
--save-dev,这样就非常方便地让你在开发一个库的时候,不会依赖工具(但不是个好方法!)。
把下面的内容添加到
package.json中。
"scripts": { "build": "webpack" }
现在你可以输入
npm run build就可以编译了。
当项目越发复杂的时候,这样的方法会变得越来越有效。你可以把所有复杂的操作隐藏在
scripts里面来保证界面的简洁。
不过潜在的问题是这种方法会导致如果你使用一些特殊的指令的时候只能在 Unix 环境中使用。所以如果你需要考虑一些未知的环境中的话,那么 gulp-webpack 会是一个好的解决方案。
注意 NPM 会找到 Webpack,
npm run会把他临时加到
PATH来让我们这个神奇的命令工作。
工作流
如果需要一直输入npm run build确实是一件非常无聊的事情,幸运的是,我们可以把让他安静的运行,让我们设置
webpack-dev-server。
设置 webpack-dev-server
第一步,输入 npm i webpack-dev-server --save,此外,我们需要去调整
package.jsonscripts 部分去包含这个指令,下面是基本的设置:
package.json
{ "scripts": { "build": "webpack", "dev": "webpack-dev-server --devtool eval --progress --colors --hot --content-base build" } }
当你在命令行里运行
npm run dev的时候他会执行 dev 属性里的值。这是这些指令的意思:
webpack-dev-server- 在 localhost:8080 建立一个 Web 服务器
--devtool eval- 为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号
--progress- 显示合并代码进度
--colors- Yay,命令行中显示颜色!
--content-base build- 指向设置的输出目录
总的来说,当你运行
npm run dev的时候,会启动一个 Web 服务器,然后监听文件修改,然后自动重新合并你的代码。真的非常简洁!
访问 http://localhost:8080 你会看到效果。
浏览器自动刷新
当运行 webpack-dev-server 的时候,它会监听你的文件修改。当项目重新合并之后,会通知浏览器刷新。为了能够触发这样的行为,你需要把你的 index.html 放到build/文件夹下,然后做这样的修改:
build/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <script src="http://localhost:8080/webpack-dev-server.js"></script> <script src="bundle.js"></script> </body> </html>
我们需要增加一个脚本当发生改动的时候去自动刷新应用,你需要在配置中增加一个入口点。
var path = require('path'); module.exports = { entry: ['webpack/hot/dev-server', path.resolve(__dirname, 'app/main.js')], output: { path: path.resolve(__dirname, '/build'), filename: 'bundle.js', }, };
就是这样!现在你的应用就可以在文件修改之后自动刷新了。
默认环境
在上面的例子中我们创建了 index.html 文件来获取更多的自由和控制。同样也可以从 http://localhost:8080/webpack-dev-server/bundle 运行应用。这会触发一个默认的你不能控制的 index.html ,它同样会触发一个允许iFrame中显示重合并的过程。引入文件
模块
Webpack 允许你使用不同的模块类型,但是 “底层”必须使用同一种实现。所有的模块可以直接在盒外运行。ES6 模块
import MyModule from './MyModule.js';
CommonJS
var MyModule = require('./MyModule.js');
AMD
define(['./MyModule.js'], function (MyModule) { });
理解文件路径
一个模块需要用它的文件路径来加载,看一下下面的这个结构:/app
/modules
MyModule.js
main.js (entry point)
utils.js
打开 main.js 然后可以通过下面两种方式引入 app/modules/MyModule.js
app/main.js
// ES6 import MyModule from './modules/MyModule.js'; // CommonJS var MyModule = require('./modules/MyModule.js');
最开始的
./是 “相对当前文件路径”
让我们打开 MyModule.js 然后引入 app/utils:
app/modules/MyModule.js
// ES6 相对路径 import utils from './../utils.js'; // ES6 绝对路径 import utils from '/utils.js'; // CommonJS 相对路径 var utils = require('./../utils.js'); // CommonJS 绝对路径 var utils = require('/utils.js');
相对路径是相对当前目录。绝对路径是相对入口文件,这个案例中是 main.js。
打开 main.js 然后可以通过下面两种方式引入 app/modules/MyModule.js
app/main.js
// ES6 import MyModule from './modules/MyModule.js'; // CommonJS var MyModule = require('./modules/MyModule.js');
最开始的
./是 “相对当前文件路径”
让我们打开 MyModule.js 然后引入 app/utils:
app/modules/MyModule.js
// ES6 相对路径 import utils from './../utils.js'; // ES6 绝对路径 import utils from '/utils.js'; // CommonJS 相对路径 var utils = require('./../utils.js'); // CommonJS 绝对路径 var utils = require('/utils.js');
相对路径是相对当前目录。绝对路径是相对入口文件,这个案例中是 main.js。
相关文章推荐
- React创建项目报错 Error: EACCES: permission denied, open '/Users/****/.babel.json'
- React学习笔记
- [React] Using the classnames library for conditional CSS
- [React] Creating a Stateless Functional Component
- 1. react-native-ios之----20分钟搭建环境
- React的设计哲学 - 简单之美
- react 入门实例教程
- ES6 for React
- Angular和React的对比
- typeScript.webpack&react的正确版quickStart
- 走进ReactiveCocoa的世界
- ReactiveCocoa自述:工作原理和应用
- 轻松入门React和Webpack
- 使用yeoman快速搭建react-webpack开发环境
- React-Native 与 Android 集成 <一、环境搭建>
- React Native入门教程 3 -- Flex布局
- React Native入门教程 3 -- Flex布局
- iOS 开发之 ReactiveCocoa(进阶)
- iOS 开发之 ReactiveCocoa(基础)
- React-Native学习指南