zoukankan      html  css  js  c++  java
  • 新建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 早放弃了.

  • 相关阅读:
    hdu 1106 排序(排序)
    hdu 1040 As Easy As A+B(排序)
    hdu 1029 Ignatius and the Princess IV(排序)
    mysql-9索引
    mysql-8 alter命令
    mysql-7事务管理
    mysql-6正则表达式
    http协议
    9-2交互体验
    9-2专项测试下午
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/10509445.html
Copyright © 2011-2022 走看看