Duan Hong +

造了个轮子

前段时间写了几篇关于前端及前端工程化的文章:

上述方案,自己练手可以,但内部推广使用还不够:

如果不懂我在说什么,参考下YO

所以,想着把上述方案整合起来,打造成一个工具,类似这样:

$:  pepper
    ?  选择要执行的任务:
    >  初始化新项目
       生成新页面模版
       生成新组件模版
       开发调试
       项目打包
       

好,目标有了,接下来该如何做呢?

  1. 依赖分离 作为一个工具,尽可能的减少外部依赖。之前的项目结构是这样的:
.                             
├── /node_modules/
├── /src/
│   ├── /pages/
│   ├── /components/
│   ├── /assets/
│   ├── /scss/
│   └── /utils/
├── webpack.config.js 
├── webpack.config.prod.js 
├── index.template.html 
└── package.json

分离后是这样的

.                            
├── /node_modules/
├── /src/
│   ├── /pages/
│   ├── /components/
│   ├── /assets/
│   ├── /scss/
│   └── /utils/
├── pepper.json
└── package.json

这里只保留package.json中的dependencies,移除了下面所有的devDenpendencies

"devDependencies": {
    "autoprefixer-loader": "^3.1.0",
    "babel-eslint": "^4.1.3",
    "babel-loader": "^5.3.2",
    "babel-plugin-react-transform": "^1.1.1",
    "css-loader": "^0.21.0",
    "eslint-loader": "^1.1.1",
    "exports-loader": "^0.6.2",
    "extract-text-webpack-plugin": "^0.8.2",
    "file-loader": "^0.8.1",
    "html-webpack-plugin": "^1.6.2",
    "imports-loader": "^0.6.5",
    "json-loader": "^0.5.2",
    "less": "^2.5.3",
    "less-loader": "^2.2.2",
    "node-sass": "^3.4.2",
    "react-proxy-loader": "^0.3.4",
    "react-transform-catch-errors": "^1.0.0",
    "react-transform-hmr": "^1.0.1",
    "redbox-react": "^1.2.0",
    "rimraf": "^2.4.3",
    "sass-loader": "^3.1.1",
    "style-loader": "^0.13.0",
    "url-loader": "^0.5.5",
    "webpack": "^1.12.9",
    "webpack-dev-middleware": "^1.4.0",
    "webpack-hot-middleware": "^2.5.0"
  }

这样的话,项目本身的依赖就很少了:

// package.json
{
  "name": "demo2",
  "version": "0.1.0",
  "description": "front end solution powered by pepper",
  "author": "pepper",
  "license": "ISC",
  "dependencies": {
    "classnames": "^1.2.0",
    "react": "^0.14.1",
    "react-dom": "^0.14.1",
    "react-router-component": "^0.27.2",
    "react-slick": "^0.9.2",
    "reqwest": "^2.0.5"
  }
}
  1. 开发调试
$  pepper init [project_name]

将生成如下项目模版:

.
├── /node_modules/
├── /src/
│   ├── /pages/
│   ├── /components/
│   ├── /assets/
│   ├── /scss/
│   └── /utils/
├── pepper.json
└── package.json
$  pepper page [new_page_name]

// exec pepper page page1 

├── /src/
│   ├── /pages/
    │   ├── /page1/
        │   ├── index.jsx
        │   ├── style.scss
$  pepper component [new_page_name]

// exec pepper component Header 

├── /src/
│   ├── /components/
    │   ├── /Header/
        │   ├── index.jsx
        │   ├── style.scss
命令参数 说明
pepper help ?
pepper init [app_name] create seed proj
pepper page [page_name] create new page
pepper component [comp_name] create new component
pepper start debug start
pepper test test mode build
pepper pre pre mode build
pepper release release mode build

这是继上个月之后的又一版优化。不知道为啥,就是没心思仔细研读yeoman的文档,学习如何定义自己的Generator,索性自己动手造了个轮子。

那如何使用呢?

$ npm install we-pepper -g;// make sure webpack already install globally 
 
$ pepper init test; // then to have a try in test dir 

15年的最后一个月,简单回顾了下这一年里自己在技术领域学到了什么:

三年里,技术学习曲线日渐平缓,新的知识贵在创新,旧的知识在于积累。

像React,Docker之类的技术创新,学习它不是为了赶时髦。一种解决方案的诞生,自有其产生和存在,抑或流行的原因。不学习,你就落后了。

对于新技术的尝试,绝不应止步所在公司内的保守策略。

要回家了,下次细谈~

post@Tue Dec  1 21:21:22 CST 2015

Wanna say something ?

Blog

Friends