• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

第20章 0413-node,npm与模块

Data: 2017-12-22 14:09:22Form: JournalClick: 0

demo1:模块导出
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>模块-1</title>
    <!-- <script src="1.js"></script>
    <script src="2.js"></script> -->
</head>
<body>
    <script type="module">
        // 模块: 就是一个外部的js
        // 传统js,引入外部js,共享一个全局空间
        // 模块有自己的独立作用域
        // 导入模块
        // import 成员列表 from 模块路径
        import {email} from './1.js';
        import {email,hello} from './1.js';
        // 默认导出的成员不能放在大括号中,只能放前面
         import hello,{email} from './1.js';
         import { email, hello, user, Demo } from './1.js';
         //{ email, hello, user, Demo } 给它找一个爸爸,全部挂上去
        // 命名空间,就是所有导出成员组的别名
        import * as phpcn from './1.js';


        // console.log(email);
        // console.log(hello(email));
        // console.log(user);
        // console.log(new Demo().show());

        // 如果使用命名空间导出,在访问模块成员,必须带前命名空间前缀
        // 当前空间前缀: phpcn
        console.log(phpcn);
        console.log(phpcn.email);
        console.log(phpcn.hello(phpcn.email));
        console.log(phpcn.user);
        console.log((new phpcn.Demo()).show());

        // 导入时也可以设置别名
        import {email as myemail} from './2.js';
        console.log(myemail);

        // 导入成员的别名,可以在导出时设置,也可以在导入时设置
    </script>
</body>
</html>
// 1.js
// 模块: 所有成员,默认都是私有的
let email = '123456@php.cn';

function hello(email) {
  return 'My email is : ' + email;
}

let user = { x: 1, y: 2 };

class Demo {
  show() {
    return 'Hello php.cn';
  }
}
// export { email, hello };
// hello 是默认导出成员,一个大括号只能有一个默认导出成员
// export { email, hello as default };

export { email, hello, user, Demo };
// 2.js
let email = 'admin@php.cn';

// as alias
// export { email as myemail };

// 别名也可以在引入的地方设置
export { email };
demo2:node 
# Node 命令

```shell
# 版本号
node -v

# 查看当前路径
pwd

# 切换路径
cd

# 回到上一级
cd ..
cd ../../

# 清屏
clear
```

node: 完成参数前用二个`--`,简化参数用一个`-`

命令行 node 环境下,执行简单的 js

```bash
# 进入
node
#退出
.exit
```

node: 执行 js

## npm

- `npm`: node 内置的"包"管理器,与 node 发行版本一起提供
- `npm version`: 查询当前`npm`更详细的描述信息

> NPM 是通过`package.json`配置文件管理当前项目依赖项

- 生成`package.json`

  - 交互式: `npm init`
  - 默认: `npm init --yes``npm init -y`(推荐)

```base
"axios": "^0.26.1"
0: 大版本
26:小版本
1: 补丁
^: 仅允许小版本更新
*: 允许大版本更新
~: 仅允许修复补丁
```

npm i axios -S: 生产依赖
npm i axios -D:开发依赖

npm root -g: 查看全局模块的路径
// node中的模块

// CommonJS

// 模块就是一个js文件, 内部成员全部私有化
// 有独立的作用域,成员只有导出才可以被外部访问

// 1. 核心模块: 内置,开箱即用
// 2. 文件模块: 自定义
// 3. 第三方模块: npm安装的

// 1. 核心模块
const http = require('http');
// console.log(http);

// 2. 文件模块
let mysite = require('./m1.js');
// console.log(mysite);
// console.log(mysite.site);
console.log(mysite.getSite());
// http模块,创建web服务器
const http = require('http');

http
  .createServer((request, response) => {
    response.writeHead(200, { 'Content-Type': 'application/json' });
    response.end(`
        {
            "userId":123,
            "userName": "猪老师",
            "email": "498668472@qq.com"
        }
      `);
  })
  .listen(8081, () => console.log('http://127.0.0.1:8081/'));
// 文件模板
const fs = require('fs');
// console.log(fs);
// node回调要求:错误优先,出错信息必须做为第一个参数传入
// __dirname: 返回当前项目的路径 __DIR__
console.log(__dirname);
// C:\Users\Administrator\Desktop\lesson-19\0413\readme.txt
fs.readFile(__dirname + '/readme.txt', function (err, data) {
  if (err) return console.log(err);
  console.log(data.toString());
});
// path
const path = require('path');

const str = './node/hello.js';

// 绝对路径
console.log(path.resolve(str));
console.log(__dirname);
// 目录部分
console.log(path.dirname(str));
// 文件名
console.log(path.basename(str));
// 扩展名
console.log(path.extname(str));
// 1. 逐个导出
// 声明与导出二合一
// 需要一个挂载器,导出对象 exports
// 将需要导出的成员,做为exports对象的属性
// exports.site = 'php中文网';
// exports.getSite = function () {
//   // php中文网 (php.cn)
//   return this.site + ' (php.cn)';
// };

// 2. 统一导出
// 声明
// let site = 'php中文网';
// let getSite = function () {
//   return this.site + ' (php.cn)';
// };

// 导出
// exports.site = site;
// exports.getSite = getSite;

// 常用的另外一种
// const exports = module.exports
// 以下方式是最容易理解,更直观
module.exports = {
  site: '第19期欢迎你,我是猪老师',
  getSite() {
    return this.site + ' (php.cn)';
  },
};
Name:
<提交>