将项目开发基础文件 react-mobx-starter-master.zip
解压缩,并用这个目录作为项目根目录。
在项目根目录中,执行下面的命令,就会自动按照package.json的配置安装依赖模块。
$ npm install
或者 $ npm i
安装完成后,会生成一个目录 node_modules
,里面是安装的所有依赖的模块
项目目录结构
.
├── .babelrc
├── .gitignore
├── index.html
├── jsconfig.json
├── LICENSE
├── .npmrc
├── package.json
├── README.md
├── src
│ ├── App.js
│ ├── AppState.js
│ ├── index.html
│ └── index.js
├── node_modules
│ ├── ...
├── webpack.config.dev.js
└── webpack.config.prod.js
$ npm init
产生的文件,里面记录项目信息,所有项目依赖
可指定到对应的git仓库
"repository": {
"type": "git",
"url": "https://192.168.124.135/react-mobx/react-mobx-starter.git"
}
"scripts": {
"test": "jest",
"start": "webpack-dev-server --config webpack.config.dev.js --hot --inline",
"build": "rimraf dist && webpack -p --config webpack.config.prod.js"
}
start
指定启动webpack
的dev server
开发用WEB Server
主要提供2个功能:静态文件支持、自动刷新和热替换HMR(Hot Module replacement)
--hot
启动HMR--inline
默认模式build
使用webpack
构建打包。对应 $ npm run build
devDependencies 开发时依赖,不会打包到目标文件中。对应 npm install xxx --save-dev
例如babel的一些依赖,只是为了帮我们转译代码,没有必要发布到生产环境中
dependencies 运行时依赖,会打包到项目中。对应 npm install xxx --save
"devDependencies": {
"babel-core": "^6.24.1",
"babel-jest": "^19.0.0",
"babel-loader": "^6.4.1",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.4.0",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"css-loader": "^0.28.0",
"html-webpack-plugin": "^2.28.0",
"jest": "^19.0.2",
"less": "^2.7.2",
"less-loader": "^4.0.3",
"react-hot-loader": "^4.3.12",
"rimraf": "^2.6.2",
"source-map": "^0.5.6",
"source-map-loader": "^0.2.1",
"style-loader": "^0.16.1",
"uglify-js": "^2.8.22",
"webpack": "^2.4.1",
"webpack-dev-server": "^2.4.2"
}
版本号指定
版本号
,只安装指定版本号的~版本号
,例如 ~1.2.3 表示安装1.2.x中最新版本,不低于1.2.3,但不能安装1.3.x^版本号
,例如 ^2.4.1 表示安装2.x.x最新版本不低于2.4.1latest
,安装最新版本babel 转译,因为开发用了很多ES6语法。从6.x开始babel拆分成很多插件,需要什么引入什么
css样式相关的包括:
react-hot-loader
source-map
webpack的 loader
"dependencies": {
"antd": "^3.10.9",
"axios": "^0.16.1",
"babel-polyfill": "^6.23.0",
"babel-runtime": "^6.23.0",
"mobx": "^4.6.0",
"mobx-react": "^5.4.2",
"react": "^16.6.3",
"react-dom": "^16.6.3",
"react-router": "^4.3.1",
"react-router-dom": "^4.3.1"
}
antd 即 ant design,基于react实现,蚂蚁金服开源的react的UI库。做中后台管理非常方便
axios 异步请求支持
polyfill 解决浏览器api不支持的问题。写好polyfill就让你的浏览器支持,帮你抹平差异化
react开发的主框架
react-dom 支持DOM
react-router 支持路由
react-router-dom DOM绑定路由
mobx 状态管理库,透明化。
mobx-react mobx和react结合的模块
react和mobx是一个强强联合
.babelrc
babel转译的配置文件
{
"presets": [
"react",
"env",
"stage-0"
],
"plugins": [
"transform-decorators-legacy",
"transform-runtime",
"react-hot-loader/babel"
]
}
这是一个符合Commonjs的模块
module.exports
导出
devtool:'source-map’
entry入口
output输出
__dirname+'dist'
,名字叫做 bundle.js
。 __dirname
是nodejs
中获取当前js文件
所在的目录名/assets/
表示网站根目录下assets
目录下resolve解析
'.js'
的意思是,如果用户导入模块的时候不带扩展名,它尝试补全module 模块
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' }
]
}, {
test: /\.css$/,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" },
]
},
{
test: /\.less$/,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" },
{ loader: "less-loader" }
]
}
]
},
test 匹配条件的
exclude 排除的, /node_modules/
打包排除目录。这一句一定要有,否则,编译就把这个目录下所有文件也拿进来了,巨大无比
use 使用模块的UseEntries列表中的loader
rules中对.js
结尾的但不在node_modules目录的文件使用转译babel-loader
加载器:倒着写,先应用数组中的最后一个
标签把css添加到DOM中CSS好处简单易学,但是坏处是没有模块化、复用的概念,因为它不是语言
LESS是一门CSS的预处理语言,扩展了CSS,增加了变量、Mixin、函数等开发语言的特性,从而简化了CSS的编写
LESS本身是一套语法规则及解析器,将写好的LESS解析成CSS。LESS可以使用在浏览器端和服务器端
@color: #4D926F;
#header {
color: @color;
}
h2 {
color: @color;
}
可以使用解析成如下的CSS
#header {
color: #4D926F;
}
h2 {
color: #4D926F;
}
LESS在服务器端使用,需要使用LESS编译器, $ npm install less
,本项目目录已经安装过了
编译输出到控制台
$ node_modules/.bin/lessc test.less
编译输出到文件
$ node_modules/.bin/lessc test.less test.css
plugins:webpack的插件
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(true),
new webpack.HotModuleReplacementPlugin(),
new webpack.DefinePlugin({'process.env': {NODE_ENV: JSON.stringify('development')}})
devServer,开发用server
devServer: {
compress: true,
port: 3000,
publicPath: '/assets/',
hot: true,
inline: true,
historyApiFallback: true,
stats: {
chunks: false
},
proxy: {
'/api': {
target: 'http://127.0.0.1:8000',
changeOrigin: true,
pathRewrite: {'^/api':''}
}
}
}
/api
开头URL都代理到 http://127.0.0.1:8000
去jsconfig.json
是vscode的配置文件,覆盖当前配置
以上是所有配置文件的解释。拿到这个文件夹后,需要修改name项目名称、version版本、description描述,需要修改repository仓库地址,需要修改author作者、license许可证信息。这些信息修改好之后,就可以开始开发了
在项目根目录,使用
$ npm start
启动成功应该就可以访问了
webpack使用babel转译、打包,较为耗时,需要等一会儿