造了个轮子来让nodejs可以像php一样写代码

399 阅读1分钟

之所以要造这个轮子,原因有三:

  1. php没有js的语法灵活

  2. nodejs不能像php一样写嵌入html模版的语法

  3. 没找到合适的现成的轮子

使用方法

  1. 全局安装 cwg-pretreat-js 模块,运行 npm install -g cwg-pretreat-js

用法简单示例

  1. 新建一个文件夹,aaa

  2. 在aaa里新建一个txt文件,名字改为 readdir.cjs

  3. 打开 readdir.cjs,编写内容 <?js echo('xxx') ,然后保存

  4. 在aaa目录下运行命令:cjs --server,此时浏览器会自动打开一个页面,点 readdir.cjs,就可以看到页面展示的是 xxx

  5. 修改readdir.cjs的内容来实现一个基础的文件夹遍历工具,如下

<meta charset=utf8 />
<?js
const path=require('path')
const __DIR__=decodeURIComponent(path.resolve(query.dir||'.'))
?>
<a href='?dir=<?js echo(encodeURIComponent(__DIR__+'/..')) ?>'>回到上一层</a>
<h5>遍历目录: <?js echo(__DIR__) ?></h5>
<?js
const fs=require('fs')
const nc2pf=(f, ...a)=>new Promise((resolve, reject)=>{
  f(...a, (e, res)=>{
    if(e) reject(e)
    resolve(res)
  })
})
try{
  const ls=await nc2pf(fs.readdir, __DIR__)
  for(let i=0; i<ls.length; i++) {
    const fn=ls[i]
    const linkfn=encodeURIComponent(__DIR__+'/'+fn)
    const isdir=await nc2pf(fs.stat, __DIR__+'/'+fn).then(a=>a.isDirectory()).catch(e=>0)
  ?>
    <?js if(isdir) { ?>
      <a href="?dir=<?js echo(linkfn) ?>"><?js echo(fn) ?></a><br />
    <?js }else{ ?>
      <span><?js echo(fn) ?></span><br />
    <?js } ?>
  <?js
  }
}catch(e) {
  echo('no access')
}

  1. 刷新页面,就可以看到效果了

使用场景

  1. 本地工具类,例如上述的文件夹遍历器

  2. 动态说明文档,例如需要根据代码的规则自动分离注释和实际内容,生成文档页面。一个现成的例子 www.npmjs.com/package/rea… ,其中说明手册就是这样写的

  3. 其他更多场景,自由发挥,如果需要自然会用得上