新建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配置后, ...
随机推荐
- 网站ASHX不执行故障
今天修改之前做的一个网站,添加了ashx文件,但调试时发现里面的代码不执行. 检查webconfig文件发现其中有一项配置了ashx的处理方式: <system.web> <http ...
- 线段树合并 || BZOJ 5457: 城市
题面:https://www.lydsy.com/JudgeOnline/problem.php?id=5457 题解: 线段树合并,对于每个节点维护sum(以该节点为根的子树中最大的种类和)和kin ...
- [iptables] 如何用iptables管理桥接模式下的设备
场景:qemu虚拟机通过tap设备与host的物理网卡通过bridge桥接上网. 如下: [root@host100 ~]# brctl show bridge name bridge id STP ...
- 简单的可以跑起来的dubbo例子
原文地址:https://blog.csdn.net/jingyangV587/article/details/78901937 项目结构: maven项目,内部三个module. <?xml ...
- python之requests模块快速上手
安装 pip3 install requests 使用 发送请求 import requests r = requests.get('http://www.baidu.com') 还可以如下方式发送不 ...
- 师兄带你轻松入门GitHub
小白:师兄,师兄,我最近总是听到Github,看起来好高大上那,可是不懂是做什么得那? 师兄:你知道微博吧,Github就是程序员的微博,你可以在这里看到全世界最优秀的程序员在做什么. 小白:师兄就是 ...
- cocos2d-js:游戏进入后台和返回游戏的事件捕获和处理
cocos2d-js 3.x处理 游戏置入后台和返回游戏的事件处理很方便 只需通过事件管理类cc.eventManager,自定义一个监听事件即可 代码如下 cc.eventManager.addCu ...
- 无需激活直接同步登入discuz,php代码(直接可用)
<?php /** * 抽奖 * @param int $total */ function getReward($total=1000) { $win1 = floor((0.12*$tota ...
- C#中哈希表(HashTable)的用法详解以及和Dictionary比较
1. 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对, ...
- 计算一个字符串的每个字符出现的次数案例——Map集合
其中,字符的包装类是Character;字符串包装类是String: 遍历字符串转换的数组,每个元素都是一个字符,看创建的这个集合有木有,一开始肯定是没有的其实,字符作为key,所以判断的是这个创建的 ...