腾讯AlloyTeam正式发布omi-cli脚手架 v1.0 - 创建网站无需任何配置
omi-cli
用户指南
文件目录
执行完omi init my-app,你可以看到会生成如下的基础目录结构
my-app/
config
project.js
config.js
src/
component
css
img
js
libs
page
index
page-b
favicon.ico
- config里的文件是webpack打包配置以及cdn、webserver,端口、route配置
- src目录是我们的项目逻辑代码目录
npm 脚本
npm start
当你执行 npm start 会自动打开 http://localhost:9000/。现在你可以开始开发和调试,修改代码并且保存,浏览器会自动刷新显示最新的结果。
npm run dist
当你执行 npm run dist 之后,会创建一个dist目录,所有要发布的文件都在里面:
my-app/
dist/
chunk
component
css
img
js
libs
favicon.ico
index.html
page-b.html
component会保留其依赖的某些资源文件,chunk会输出分割出来的模板,怎么分割请往下看。
代码分割
为了优化性能,用户不需要一次性加载所有网页的依赖,可以在需要使用的时候再进行加载,所以这部分可以进行分割成单独的模块。
如下面的a.js:
import logo from '../../img/omi.png'
module.exports = { src: logo }
通过require.ensure进行按需使用,在用户点击事件触发之后才会进行加载a.js以及a.js的所有依赖,如下面代码所示:
class Hello extends Omi.Component {
constructor(data, option){
super(data, option)
}
handleClick(){
require.ensure(['./a.js'], function() {
var a = require("./a.js")
document.body.innerHTML+=`<img src="${a.src}">`
})
}
render() {
return `
<div class="App">
<div class="App-header">
<img src='${logo}' onclick="handleClick" class="App-logo" alt="logo" />
<h2>Welcome to Omi</h2>
</div>
<p class="App-intro">
To get started, edit <code>src/component/hello.js</code> and save to reload.
</p>
<p class="App-intro">
{{name}}
</p>
</div>
`
}
}
上面是老的方式,webpack2更加建议使用一种"类函数式(function-like)"的 import() 模块加载语法。如:
import("./a.js").then(function(moduleA) {
console.log(moduleA);
document.body.innerHTML+=`<img src="${moduleA.src}">`
});
这样也能达到同样的效果,当然你也可以使用async/await。
兼容 IE8
Omi框架是可以兼容IE8的。
由于使用了webpack-hot-middleware, 开发过程不兼容IE8,但是没关系,npm run dist 生成的发布代码是兼容IE8。
需要主要的是,你需要在你的HTML里引用es5-sham或者es5-shim。如:
<!--[if lt IE 9]>
<script type="text/javascript" crossorigin="anonymous" src="//s.url.cn/qqun/xiaoqu/buluo/p/js/es5-sham-es5-sham.min.77c4325f.js"></script>
<![endif]-->
插入 CSS
通过import可以在js依赖相关的css文件,
import './index.css'
index.css会被提取到CSS文件当中,插入到head里面。
插入组件局部 CSS
import './index.css'
class Hello extends Omi.Component {
constructor(data, option){
super(data, option)
}
style(){
return require('./_hello.css')
}
...
...
}
Omi框架的style方法返回的字符串会生成为组件的局部CSS,_hello.css文件会在运行时动态插入到head里面。
需要特别注意的是: 组件的局部CSS必须使用下划线开头,如_xxx.css,_aaa-bbb.css,不然会被识别成全局CSS插入到head里。
局部CSS使用图片
当然不是必须require外部的css文件,也可以直接写在style方法内,组件的依赖的图片资源也在组件的目录内:
my-app/
src/
component
hello
index.js
pen.png
pencil.png
对应的index.js如下所示:
class Hello extends Omi.Component {
constructor(data, option){
super(data, option)
}
style(){
return `
.icon-pen {
background-image: url(${require('./pen.png')});
}
.icon-pencil {
background-image: url(${require('./pencil.png')});
}
`
}
...
...
}
插入 Less
通过import可以在js依赖相关的css文件,
import './xxx.less'
xxx.less会在转换成CSS,并且被提取到CSS文件当中,插入到head里面。
插入组件局部 Less
class Intro extends Omi.Component {
constructor(data, option){
super(data, option)
}
style(){
return require('./_index.less')
}
render() {
return `
<p class="app-intro">
To get started, edit <code>src/component/hello.js</code> and save to reload.
</p>
`
}
}
export default Intro
Omi框架的style方法返回的字符串会生成为组件的局部CSS,_index.css文件会在运行时动态插入到head里面。
需要特别注意的是: 组件的局部Less必须使用下划线开头,如_xxx.css,_aaa-bbb.css,不然会被识别成全局CSS插入到head里。
导入组件
如上面一节定义了Intro组件,利用复用。那么怎么在其他组件中使用?
import Intro from '../intro/index.js'
Omi.tag('intro',Intro)
class XXX extends Omi.Component {
constructor(data, option){
super(data, option)
}
render() {
return `
<div>
<div>Hello Omi!</div>
<intro></intro>
</div>
`
}
}
export default XXX
通过Omi.tag('intro',Intro)把组件Intro生成为可以声明式的标签。注意便签名字要使用小写,多个单词使用中划线,如:my-intro、app-header等。
导入图片、字体、SVG 等文件
如上面的例子:
import logo from './logo.svg'
logo.svg会被动态转成base64。我们可以为每种类型都对应webpack里的一个loader来处理所有的文件类型。
修改配置
打开 config.js,其位置如下:
my-app/
config
project.js
**config.js**
打开之后可以看到
module.exports = {
"webserver": "//localhost:9000/",
"cdn": "",
"port": "9000",
"route": "/news/",
};
修改 CDN 地址
module.exports = {
"webserver": "//localhost:9000/",
"cdn": "//s.url.cn/",
"port": "9000",
"route": "/news/",
};
修改 webserver 和 port
module.exports = {
"webserver": "//localhost:9000/",
"cdn": "//s.url.cn/",
"port": "9001",
"route": "/news/",
};
修改 route
module.exports = {
"webserver": "//localhost:9001/",
"cdn": "//s.url.cn/",
"port": "9001",
"route": "/user/",
};
Github
https://github.com/AlloyTeam/omi-cli
腾讯AlloyTeam正式发布omi-cli脚手架 v1.0 - 创建网站无需任何配置的更多相关文章
- 腾讯AlloyTeam正式发布omi-cli脚手架 - 创建网站无需任何配置
omi-cli omi-cli omi-cli命令 omi框架 用户指南 文件目录 npm 脚本 npm start npm run dist 代码分割 兼容 IE8 插入 CSS 插入组件局部 CS ...
- .Net Core .Net Core V1.0 创建MVC项目
.Net Core V1.0 创建MVC项目 创建MVC项目有两种方式: 一.创建Web项目:(有太多没用的东西要去删太麻烦) 2.项目目录结构: 此种方法要注意的是,会创建好多个json文件,下面就 ...
- 腾讯AlloyTeam正式发布Canvas魔幻线条 - curvejs
[原文链接] ## 写在前面 curvejs 中文读["克js"],是腾讯AlloyTeam打造的一款魔幻线条框架,让线条成为一名优秀的舞者,让线条们成为优秀的舞团,HTML5 ...
- 腾讯AlloyTeam正式发布pasition - 制作酷炫Path过渡动画
pasition Pasition - Path Transition with little JS code, render to anywhere - 超小尺寸的Path过渡动画类库 Github ...
- vue.js---利用vue cli脚手架工具+webpack创建项目遇到的坑
1.Eslint js代码规范报错 WARNING Compiled with 2 warnings 10:43:26 ✘ http://eslint.org/docs/rules/quotes St ...
- 微信 CLI 工具正式发布 v1.0
前言 为了让开发者可以更加方便舒适地获取到微信开发的资源,今天我们基于 Senparc.Weixin SDK 正式发布了基于 .NET 的微信 CLI 工具:Weixin.CLI(v1.0). 通过 ...
- SmartIDE v1.0.23 一个非常不敏捷的发布
SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已经发布,在超过4000 个 Builds 之后,我们终于发布了v1. ...
- vue cli 3.0创建项目
.npm i -g @vue/cli .vue create my-project 此处有两个选择: 1.default (babel, eslint)默认套餐,提供babel和eslint支持 2. ...
- arcconf工具相关命令V1.0
arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf delete 1 array all #删除所有逻辑盘 Arcconf uninit 1 all ...
随机推荐
- vue2.0+elementUI构建单页面后台管理平台
git:https://github.com/reg21st/vue2-management-platform 访问:https://reg21st.github.io/vue2-management ...
- python安装win32api pywin32 后出现 ImportError: DLL load failed
ImportError: DLL load failed: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\x ...
- 【lucene系列学习四】使用IKAnalyzer分词器实现敏感词和停用词过滤
Lucene自带的中文分词器SmartChineseAnalyzer不太好扩展,于是我用了IKAnalyzer来进行敏感词和停用词的过滤. 首先,下载IKAnalyzer,我下载了 然后,由于IKAn ...
- 蓝桥杯-逆波兰表达式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 关于li标签之间的间隔如何消除!
问题:li标签用了display:inline之后虽然成功的合并在一行,但是li标签之间出现了间距. 原因:按enter键换行之后li标签之间存在着空格,正是这些空格占据了li标签之间的空间. 解决方 ...
- php函数每日学习二十个
数学函数 1,abs() 求绝对值 2,ceil() 进一法取整 3,floor() 舍去法取整 4,fmod()对浮点数进行取余 例如fmod(5.7,1.3) 5,pow() 返回数的n次方 po ...
- 关于vector push_back()与其他方式读取数据的效率对比
引言: 在读取大量数据(数组)时,使用vector会尽量保证不会炸空间(MLE),但是相比于scanf的读取方式会慢上不少.但到底效率相差有多大,我们将通过对比测试得到结果. 测试数据:利用srand ...
- CountDownLacth详解
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CounDownLatch.由于调用了countDown() 方法,所以在当前计数到达零之 ...
- springboot(二):web综合开发
上篇文章介绍了spring boot初级教程:spring boot(一):入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续为大家介绍spring boot的其它 ...
- javaWeb基础核心之一Servlet
既然是做JAVA开发的,先从一些基本的整理起来,算是知识回顾,加深记忆. 第一篇想到那理到哪,可能有点乱,不是太会排版,见谅,估计可能也就我自己看的懂. servlet在百度百科上的定义是这样的: S ...