腾讯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 ...
随机推荐
- git工具使用的简单介绍
百度百科 写道 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大 ...
- gulp基于seaJs模块化项目打包实践【原创】
公司还一直在延续使用jq+seajs的技术栈,所以只能基于现在的技术栈进行静态文件打包,而众所周知seajs的打包比较"偏门",在查了不少的文档和技术分享后终于琢磨出了自己的打包策 ...
- seajs加载angularjs
angularjs是自动完成模块的控制的,而seajs加载模块是异步的,所以不做修改,直接seajs加载angularjs会出错. 在这里讲下自己的解决方法 一.需要把ng-ap ...
- CentOS6.5 配置本地Yum源
一.Yum简介 1.Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器. 2.基于RPM包管理, ...
- MySQL中binlog参数:binlog_rows_query_log_events
在使用RBR也就是行格式的时候,去解析binlog,需要逆向才能分析出对应的原始SQL是什么,而且,里面对应的是每一条具体行变更的内容.当然,你可以开启general log,但如果我们需要的只是记录 ...
- Python之路- 反射&定制自己的数据类型
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super ...
- (原创)看我用各种姿势在手机和PC查看到连接到的wifi密码
今天一个女神来我家做客,她问我WiFi密码,然而我却奇迹般的忘记了(特么的当时心里一万个草泥马踏过去),让我在她面前尴尬求子的,所以为了防止你们也出现这种情况,我特地把各种方法整理了一下,那么感兴趣的 ...
- 使用 rsync 同步
原文地址 http://www.howtocn.org/rsync:use_rsync 选项 说明 -a, ––archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlpt ...
- ETL开发面试问题加吐槽加职业发展建议
写在前面: 作为甲方,对于乙方派来的开发人员,我是会自己面一下.总体来说遇到的水平不一,于是经过这三年多的面(cui)试(can),总结了一套自己的面试套路,中间也遇到过很多想吐槽的东西,于是大概记录 ...
- 1005 Number Sequence
Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) ...