新建node工程
之前各种node工程都是东抄抄,西抄抄的. 用ng的cli之后,发现非常舒服.所以把node新建工程的种种记录一下.
node+babel, 直接按es6标准写就好了, 不需要一定写ts再转码了(写angular再用ts), 其他情况下用其他语言写然后转码成js的方案, ClosjureScript 效率更高吧).
参考https://www.robinwieruch.de/minimal-node-js-babel-setup/
https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43ei
1 准备空代码仓库
在远程仓库(github或者bitbucket)起个空工程 然后复制 "git clone git@XXX/YYY.git"命令 在本地根目录比如~/dev 起控制台, 运行,得到空文件夹
此时应该包括,但不限于这么几个文件:
README.md
.gitingore (node版 https://github.com/github/gitignore/blob/master/Node.gitignore)
如果没有,自己新建,或者从别的工程copy过来
2 创建node工程
在控制台(code下 ctrl + `)
cd 工程路径
npm init -y
npm i --save express
此时出现:
package.json
package-lock.json
文件夹node_modules
babel
开发时直接写es6标准的代码
npm i --save-dev @babel/core @babel/node @babel/preset-env @babel/register
创建.babelrc文件
{
"presets": ["@babel/preset-env"]
}
修改package.json
{
"name": "wg-db-json",
"version": "1.0.0",
"description": "",
"main": "src/app.js",
"scripts": {
"start": "babel-node src/app.js --config=./cfg.yml",
"test": "echo \"Error: no test specified\" && exit 1"
},
...
}
创建src/app.js
import express from "express"; const app = express();
const port = 3000; app.get("/", (req, res) => res.send("Hello World!"));
process.on('uncaughtException', function (e) {
console.log(e);
}); app.listen(port, () => console.log(`Example app listening on port ${port}!`));
注意使用了import from 语句
手工创建cfg.yml (自己的app可能用到的配置文件,已经习惯用yml写,可以加注释,省去引号 也比json短小)
nodemon
为了开发时边修改边自动重新运行 注意版本号, 之后的版本在我目前的mint19.1/ubuntu18.04上,之后的版本停止任务时, node进程杀不死 重启会报错,包括文件编辑
参考https://github.com/remy/nodemon/issues/1508
现在也只能支持在命令行里npm run dev 不支持 vscode里 用按钮启动/关闭任务, 但是在vode里点"+"手动创建一个新终端 手动运行npm run dev 实在搞不定,先这样了
npm i --save-dev nodemon@1.18.7
手工创建一个nodemon.json
{
"ignore": ["**/*.test.js", ".git", "node_modules"],
"watch": ["src"],
"exec": "npm start",
"ext": "js"
}
修改package.json
{
"name": "wg-db-json",
"version": "1.0.0",
"description": "",
"main": "src/app.js",
"scripts": {
"start": "babel-node src/app.js -- --config=./cfg.yml",
"dev": "nodemon",
"test": "echo \"Error: no test specified\" && exit 1"
},
}
这样开发时, 运行npm dev 通过nodemon 调用 npm start
部署时直接运行npm start即可.
test
npm i --save-dev mocha chai
修改package.json
{
"name": "wg-db-json",
"version": "1.0.0",
"description": "",
"main": "src/app.js",
"scripts": {
"start": "babel-node src/app.js-- --config=./cfg.yml",
"dev": "nodemon",
"test": "mocha -r @babel/register"
},
...
}
创建test文件夹,随便创建一个test1.js
import { expect } from 'chai';
import 'mocha'; describe('test1', () => {
it('should be', () => {
expect('a').to.equal('a');
});
})
解析yml配置文件
1安装库,运行时用的,没有--save-dev选项
npm i js-yaml yargs --save
cfg.yml 随便写点内容
PATH_DB: ~/dev/db_test
修改app.js
import express from "express";
import fs from "fs";
//--------读yaml配置文件------------
const yaml = require('js-yaml');
const argv = require('yargs').argv;
console.log('argv', argv);
const config = yaml.safeLoad(fs.readFileSync(argv.config, { encoding: 'utf8', flag: "r" }));
console.log('yaml config', config);
// const app = express();
const port = 3000; app.get("/", (req, res) => res.send("Hello World!"));
process.on('uncaughtException', function (e) {
console.log(e);
}); app.listen(port, () => console.log(`Example app listening on port ${port}!`));
因为这俩库还是node风格的,所以还是用require导入
杂: 没关闭的node进程导致端口占用
偶尔code下关闭任务,但是node进程并没有杀死的情况.
这时无法启动新的任务.需要手动杀死僵尸进程
lsof -i :端口号
看到确实是node占用了
关闭全部node进程
killall node
这时在启动,就OK了
PS:
不常从0创建纯node工程, 所以记录一下过程.
1 理解cli的意义了: 没有cli情况下,自己手动配置各种项,确实不如angular提供了cli方便
2 定制自由度确实比较灵活. 但是也导致了雪花式配置文件, 其实也就babel和nodemon 然后自己程序用的yml 但是各种碎片文件已经不少了.
3 各种配置内容没有写在一起, 而是每个都保持三部曲:
1安装库
2修改package.json
3增加配置文件
4 遇到第三方库的版本问题对新手非常不友好. 特别是因为版本的原因导致的停止nodemon时不能正常杀死node进程, 搞了很久 效果和各种google到的都不一样. 要不是之前用过nodemon 早放弃了.
新建node工程的更多相关文章
- CCS 6新建TMS320F2812工程
准备材料 CCS6 下载地址:http://www.ti.com/tool/ccstudio F2812的C语言头文件 下载地址:http://www.ti.com/lit/zip/sprc097 安 ...
- 如何在Flash Builder里新建ActionScript工程
新建ActionScript工程 1. File > New > ActionScript Project 2. 按照提示完成工程的创建 使程序直接在Flash Player中运行 1. ...
- ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题 标签: myeclipsejavawebWeb App Libraries 2013-10-16 1 ...
- Cocos Code IDE新建lua工程报错解决方案
今天想用cocos code IDE新建一个工程,但是控制台报错:Read json file null failed, the reason is:null.我下载的是官方3.5源码,sdk,ndk ...
- 新建android工程的时候eclipse没有生成MainActivity和layout布局
一.新建android工程的时候eclipse没有生成MainActivity和layout布局 最近由于工作上的原因,开始学习Android开发,在入门的时候就遇到了不少的坑,遇到的第一个坑就是&q ...
- Android Studio新建Jni工程
2.2版本的Android Studio支持新建Jni工程,不用再像以前自己构建工程目录,首先把自己的升级自己的AS到2.2以上 然后打开Tools->Andorid->SDK manag ...
- eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
此文乃本作者配置maven,被其折磨n天,究极解决方案,好文要顶啊.欢迎致电: zhe-jiang.he@hp.com 首先各maven.archetypes下载地址: http://mirrors. ...
- Keil MDK入门---从新建一个工程开始
熟悉Keil C51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的.本文以MDK V4.03为例, ...
- 新建maven工程时pom.xml报错
新建maven工程时,pom.xml报错:第一行报如下错误:multiple annotations found at this line后添加org.eclipse.m2e相关的plugin配置后, ...
随机推荐
- python全栈开发 * 15知识点汇总 * 180621
#15 函数二 与 匿名函数1.dir() # 查看内置属性,将对象所有方法名放在另一个列表中.dic={"水果":"香蕉",'蔬菜':"土豆&quo ...
- vivado/FPGA 使用小纪
1.使用FPGA做为外部控制器的总线译码时,将总线时钟接在全局时钟脚上(MRCC),就算接在了局部时钟(SRCC)上,也要通过BUFG转为全局时钟走线,否则会因为local clk到各部分的时延较大引 ...
- POJ 2248 - Addition Chains - [迭代加深DFS]
题目链接:http://bailian.openjudge.cn/practice/2248 题解: 迭代加深DFS. DFS思路:从目前 $x[1 \sim p]$ 中选取两个,作为一个新的值尝试放 ...
- (4.9)mysql备份还原——binlog查看工具之mysqlbinlog的使用
关键词:mysqlbinlog,mysql binlog查看,二进制文件查看,binlog查看工具,binlog查看方法 常用总结: [1]在test库redo某个binlog中的文件mysqlbin ...
- Cocos Creator 资源加载(笔记)
cc.loader 加载资源动态加载资源要注意两点,一是所有需要通过脚本动态加载的资源,都必须放置在 resources 文件夹或它的子文件夹下.resources 需要在 assets 文件夹中手工 ...
- sitecore开发入门Sitecore的CRUD操作 - 第一部分
在本文中,讨论如何使用Sitecore.Data.Items.Item并对这些项执行CRUD(创建,读取,更新和删除)操作.我还将介绍如何使用Glass和Fortis类库进行相同的操作,这些操作都是对 ...
- kylin对接hive实现实时查询
前提: 安装kylin之前,需要安装hadoop2.0.hbase.hive,并且对版本有要求,可以参照官网链接 http://kylin.apache.org/cn/docs/install/in ...
- 深入浅出JAVA线程池使用原理1
前言: Java中的线程池是并发框架中运用最多的,几乎所有需要异步或并发执行任务的程序都可以使用线程池,线程池主要有三个好处: 1.降低资源消耗:可以重复使用已经创建的线程降低线程创建和销毁带来的消耗 ...
- 【数据结构】B-Tree, B+Tree, B*树介绍 转
[数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是浮云,目前Mysql的MyISAM和InnoDB都支持B-Tre ...
- Hdu2039 三角形
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2039 三角形 Time Limit: 2000/1000 MS (Java/Others) Me ...