omi-cli

用户指南

文件目录

执行完omi init my-app,你可以看到会生成如下的基础目录结构

  1. my-app/
  2. config
  3. project.js
  4. config.js
  5. src/
  6. component
  7. css
  8. img
  9. js
  10. libs
  11. page
  12. index
  13. page-b
  14. favicon.ico
  • config里的文件是webpack打包配置以及cdn、webserver,端口、route配置
  • src目录是我们的项目逻辑代码目录

npm 脚本

npm start

当你执行 npm start 会自动打开 http://localhost:9000/。现在你可以开始开发和调试,修改代码并且保存,浏览器会自动刷新显示最新的结果。

npm run dist

当你执行 npm run dist 之后,会创建一个dist目录,所有要发布的文件都在里面:

  1. my-app/
  2. dist/
  3. chunk
  4. component
  5. css
  6. img
  7. js
  8. libs
  9. favicon.ico
  10. index.html
  11. page-b.html

component会保留其依赖的某些资源文件,chunk会输出分割出来的模板,怎么分割请往下看。

代码分割

为了优化性能,用户不需要一次性加载所有网页的依赖,可以在需要使用的时候再进行加载,所以这部分可以进行分割成单独的模块。

如下面的a.js:

  1. import logo from '../../img/omi.png'
  2. module.exports = { src: logo }

通过require.ensure进行按需使用,在用户点击事件触发之后才会进行加载a.js以及a.js的所有依赖,如下面代码所示:

  1. class Hello extends Omi.Component {
  2. constructor(data, option){
  3. super(data, option)
  4. }
  5. handleClick(){
  6. require.ensure(['./a.js'], function() {
  7. var a = require("./a.js")
  8. document.body.innerHTML+=`<img src="${a.src}">`
  9. })
  10. }
  11. render() {
  12. return `
  13. <div class="App">
  14. <div class="App-header">
  15. <img src='${logo}' onclick="handleClick" class="App-logo" alt="logo" />
  16. <h2>Welcome to Omi</h2>
  17. </div>
  18. <p class="App-intro">
  19. To get started, edit <code>src/component/hello.js</code> and save to reload.
  20. </p>
  21. <p class="App-intro">
  22. {{name}}
  23. </p>
  24. </div>
  25. `
  26. }
  27. }

上面是老的方式,webpack2更加建议使用一种"类函数式(function-like)"的 import() 模块加载语法。如:

  1. import("./a.js").then(function(moduleA) {
  2. console.log(moduleA);
  3. document.body.innerHTML+=`<img src="${moduleA.src}">`
  4. });

这样也能达到同样的效果,当然你也可以使用async/await

兼容 IE8

Omi框架是可以兼容IE8的。

由于使用了webpack-hot-middleware, 开发过程不兼容IE8,但是没关系,npm run dist 生成的发布代码是兼容IE8。

需要主要的是,你需要在你的HTML里引用es5-sham或者es5-shim。如:

  1. <!--[if lt IE 9]>
  2. <script type="text/javascript" crossorigin="anonymous" src="//s.url.cn/qqun/xiaoqu/buluo/p/js/es5-sham-es5-sham.min.77c4325f.js"></script>
  3. <![endif]-->

插入 CSS

通过import可以在js依赖相关的css文件,

  1. import './index.css'

index.css会被提取到CSS文件当中,插入到head里面。

插入组件局部 CSS

  1. import './index.css'
  2. class Hello extends Omi.Component {
  3. constructor(data, option){
  4. super(data, option)
  5. }
  6. style(){
  7. return require('./_hello.css')
  8. }
  9. ...
  10. ...
  11. }

Omi框架的style方法返回的字符串会生成为组件的局部CSS,_hello.css文件会在运行时动态插入到head里面。

需要特别注意的是: 组件的局部CSS必须使用下划线开头,如_xxx.css_aaa-bbb.css,不然会被识别成全局CSS插入到head里。

局部CSS使用图片

当然不是必须require外部的css文件,也可以直接写在style方法内,组件的依赖的图片资源也在组件的目录内:

  1. my-app/
  2. src/
  3. component
  4. hello
  5. index.js
  6. pen.png
  7. pencil.png

对应的index.js如下所示:

  1. class Hello extends Omi.Component {
  2. constructor(data, option){
  3. super(data, option)
  4. }
  5. style(){
  6. return `
  7. .icon-pen {
  8. background-image: url(${require('./pen.png')});
  9. }
  10. .icon-pencil {
  11. background-image: url(${require('./pencil.png')});
  12. }
  13. `
  14. }
  15. ...
  16. ...
  17. }

插入 Less

通过import可以在js依赖相关的css文件,

  1. import './xxx.less'

xxx.less会在转换成CSS,并且被提取到CSS文件当中,插入到head里面。

插入组件局部 Less


  1. class Intro extends Omi.Component {
  2. constructor(data, option){
  3. super(data, option)
  4. }
  5. style(){
  6. return require('./_index.less')
  7. }
  8. render() {
  9. return `
  10. <p class="app-intro">
  11. To get started, edit <code>src/component/hello.js</code> and save to reload.
  12. </p>
  13. `
  14. }
  15. }
  16. export default Intro

Omi框架的style方法返回的字符串会生成为组件的局部CSS,_index.css文件会在运行时动态插入到head里面。

需要特别注意的是: 组件的局部Less必须使用下划线开头,如_xxx.css_aaa-bbb.css,不然会被识别成全局CSS插入到head里。

导入组件

如上面一节定义了Intro组件,利用复用。那么怎么在其他组件中使用?

  1. import Intro from '../intro/index.js'
  2. Omi.tag('intro',Intro)
  3. class XXX extends Omi.Component {
  4. constructor(data, option){
  5. super(data, option)
  6. }
  7. render() {
  8. return `
  9. <div>
  10. <div>Hello Omi!</div>
  11. <intro></intro>
  12. </div>
  13. `
  14. }
  15. }
  16. export default XXX

通过Omi.tag('intro',Intro)把组件Intro生成为可以声明式的标签。注意便签名字要使用小写,多个单词使用中划线,如:my-introapp-header等。

导入图片、字体、SVG 等文件

如上面的例子:

  1. import logo from './logo.svg'

logo.svg会被动态转成base64。我们可以为每种类型都对应webpack里的一个loader来处理所有的文件类型。

修改配置

打开 config.js,其位置如下:

  1. my-app/
  2. config
  3. project.js
  4. **config.js**

打开之后可以看到

  1. module.exports = {
  2. "webserver": "//localhost:9000/",
  3. "cdn": "",
  4. "port": "9000",
  5. "route": "/news/",
  6. };

修改 CDN 地址

  1. module.exports = {
  2. "webserver": "//localhost:9000/",
  3. "cdn": "//s.url.cn/",
  4. "port": "9000",
  5. "route": "/news/",
  6. };

修改 webserver 和 port

  1. module.exports = {
  2. "webserver": "//localhost:9000/",
  3. "cdn": "//s.url.cn/",
  4. "port": "9001",
  5. "route": "/news/",
  6. };

修改 route

  1. module.exports = {
  2. "webserver": "//localhost:9001/",
  3. "cdn": "//s.url.cn/",
  4. "port": "9001",
  5. "route": "/user/",
  6. };

Github

https://github.com/AlloyTeam/omi-cli

腾讯AlloyTeam正式发布omi-cli脚手架 v1.0 - 创建网站无需任何配置的更多相关文章

  1. 腾讯AlloyTeam正式发布omi-cli脚手架 - 创建网站无需任何配置

    omi-cli omi-cli omi-cli命令 omi框架 用户指南 文件目录 npm 脚本 npm start npm run dist 代码分割 兼容 IE8 插入 CSS 插入组件局部 CS ...

  2. .Net Core .Net Core V1.0 创建MVC项目

    .Net Core V1.0 创建MVC项目 创建MVC项目有两种方式: 一.创建Web项目:(有太多没用的东西要去删太麻烦) 2.项目目录结构: 此种方法要注意的是,会创建好多个json文件,下面就 ...

  3. 腾讯AlloyTeam正式发布Canvas魔幻线条 - curvejs

    [原文链接] ## 写在前面 curvejs 中文读["克js"],是腾讯AlloyTeam打造的一款魔幻线条框架,让线条成为一名优秀的舞者,让线条们成为优秀的舞团,HTML5 ...

  4. 腾讯AlloyTeam正式发布pasition - 制作酷炫Path过渡动画

    pasition Pasition - Path Transition with little JS code, render to anywhere - 超小尺寸的Path过渡动画类库 Github ...

  5. vue.js---利用vue cli脚手架工具+webpack创建项目遇到的坑

    1.Eslint js代码规范报错 WARNING Compiled with 2 warnings 10:43:26 ✘ http://eslint.org/docs/rules/quotes St ...

  6. 微信 CLI 工具正式发布 v1.0

    前言 为了让开发者可以更加方便舒适地获取到微信开发的资源,今天我们基于 Senparc.Weixin SDK 正式发布了基于 .NET 的微信 CLI 工具:Weixin.CLI(v1.0). 通过 ...

  7. SmartIDE v1.0.23 一个非常不敏捷的发布

    SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已经发布,在超过4000 个 Builds 之后,我们终于发布了v1. ...

  8. vue cli 3.0创建项目

    .npm i -g @vue/cli .vue create my-project 此处有两个选择: 1.default (babel, eslint)默认套餐,提供babel和eslint支持 2. ...

  9. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

随机推荐

  1. phpcms课堂笔记

    获取父分类下面的子分类 {loop subcat(77) $k $v}{php $subcatid[] = $k;}{/loop}<?php $subcatid = implode(',', $ ...

  2. Http协议---Hyper Text Transfer Protocol

    HTTP是一个基于TCP/IP通信协议来传递数据(超文本传输协议) 好久木来更新文章了~我又回归了,此刻鼓掌...... 今天就来分享下http协议的小知识,在接口测试中我们最常接触的HTTP协议,那 ...

  3. CF #April Fools Day Contest 2016 E Out of Controls

    题目连接:http://codeforces.com/problemset/problem/656/E 愚人节专场的E,整个其实就是个Floyd算法,但是要求代码中不能包含 definedoforfo ...

  4. PL/SQL 自动补全[转]

    1.新建 shortcuts.txt 内容如下: s = SELECT t.* FROM t w = WHERE b = BETWEEN AND l = LIKE '%%' o = ORDER BY ...

  5. Cygwin在线安装指南

    详细说明请看文章http://www.crifan.com/files/doc/docbook/cygwin_intro/release/htmls/install_cygwin_setup_exe. ...

  6. 用Pyton玩转数据练习题---第二周

    找前5个默尼森数.P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数.例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数. # coding:utf-8 im ...

  7. ICDM评选:数据挖掘十大经典算法

    原文地址:http://blog.csdn.net/aladdina/article/details/4141177 国际权威的学术组织the IEEE International Conferenc ...

  8. 基础并查集poj2236

    An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...

  9. 用java实现大文件分割、排序、合并

    import java.io.BufferedReader;   import java.io.BufferedWriter;   import java.io.FileNotFoundExcepti ...

  10. Andriod相机开发关于startPreview Failed的错误的特别记录(重要)

    年前,自己做的Android相机嵌入到一款火爆的游戏中去了,经过几次的修改升级,相机运行上报的错误也越来越少, 但是,前几天刚上线的最新相机,却老是在Android 2.3机器上出现startPrev ...