新建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配置后, ...
随机推荐
- 2018今日头条杯 E-Jump a Jump
Problem E. Jump A JumpInput file: standard inputOutput file: standard outputTime limit: 1 secondsMemor ...
- ping不通,配置dns
vim /etc/resolv.conf nameserver 119.29.29.29 nameserver 182.254.116.116 nameserver 8.8.8.8
- J2EE快速开发框架
地址: http://git.oschina.net/blind/app 项目简介 使用Maven对项目进行模块化管理,提高项目的易开发性.扩展性. 实现了通用的系统管理模块功能,包含:用户.角色.权 ...
- InnoDB中锁的查看
Ⅰ. show engine innodb status\G 1.1 实力分析一波 锁介绍的那篇中已经提到了这个命令,现在我们开一个参数,更细致的分析一下这个命令 (root@localhost) [ ...
- HashMap出现Hash DOS攻击的问题
随着RESTful风格的接口普及,程序员默认都会使用json作为数据传递的方式.json格式的数据冗余少,兼容性高,从提出到现在已被广泛的使用,可以说成为了Web的一种标准.无论我们服务端使用什么语言 ...
- JDK8新增接口的默认方法与静态方法
JDK8之前,interface中可以定义常量和抽象方法,访问修饰符是public. public interface A { /** a1和a2写法是等价的 */ public static fin ...
- springmvc.xml 中 <url-pattern></url-pattern>节点详解
1. 先来上段常见的代码 <!-- MVC Servlet --> <servlet> <servlet-name>springServlet</servl ...
- OCP-第三节课.md
一. dataguard stream 字节流技术: 二. 突然断电:触发实例恢复过程: 三. 宕机:赔钱 四. Redis.MQ(消息中间件.队列管理器.缓存)(内存数据库) 五. IBM MQ ...
- C#基础加强(8)之委托和事件
委托 简介 委托是一种可以声明出指向方法的变量的数据类型. 声明委托的方式 格式: delegate <返回值类型> 委托类型名(参数) ,例如: delegate void MyDel( ...
- db2常见错误代码及原因
sqlcode sqlstate 说明000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引用+098 01568 ...