nodejs基础理解
//node 基本模型 function (exports, require, module, __filename, __dirname) { console.log(arguments.callee + "") //exports === module.exports //modult.exports 几种形式 modult.exports = { name:"zs", say(){ console.log("my name is zs") } } module.exports.age = 23; //exports 几种形式 exports.country = "china"; //下面这种形式是不行的,因为改变了内存地址,这种引用不出去任何东西,导出的模块仍然是 module.exports exports = { }
}
//只要 module.exports 赋值个新对象 不管 放在前面 还是后面 exports.age 这种都不会生效 exports = {} 更不会生效 //module.exports = {} 是最后的模块导出结果,别的模块 app.js 引用 let t = require("t.js") t 里面只包含 zs 和 say exports.age = 321; exports.how = function () { console.log("my age is " + this.age) } module.exports = { name: "zs", say() { console.log("my name is " + this.name) } }
//生成json npm init -y package.json { "name": "node", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "math": "^0.0.3" }, "dependencies": { "icu": "^0.0.0" } }
//常见命令 //save 包依赖 //-g 全局工具 比如 npm i cnpm -g --registry=https://registry.npm.taobao.org //-D 开发者依赖 //npm install/i package --save/-g/-D //npm r package //npm search package //寻找包的时候 首先从 app.js node_modules 目录下寻找包 寻找不到 向上级目录中的 node_modules 寻找 一直找到根目录 最后报错 npm install install all the dependencies in your project npm install <foo> add the <foo> dependency to your project
//如果执行 cnpm version 出现下面错误 解决办法 win r 运行 PowerShell 执行 set-ExecutionPoliy RemoteSigned 回车 选择 A 问题解决 cnpm : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
//npm config get registry //查看当前的源registry //nrm test 测出当前可以用的 registry 前面标注*号的为当前的源 nrm ls 列出 所有源 没有 * //nrm use taobao 设置 taobao 对应的源 //powershell 也支持 ls cp 之类的 linux 命
//也可以一次安装多个包 中间用空格隔开 cnpm babel-cli babel-preset-env browserify -D //此时因为 babel-cli 这些工具 并没有 -g 就是作为工具安装到本地电脑上 所以不能 直接运行 babel 命令 需要 npx babel //不能为npm 因为 npm run test, test就是scripts里面配置的test 命令,npx 可以运行 非-g 安装的 工具类型的包 "scripts": { "test": "echo \"Error: no test specified\" && exit 1" },
//这么经过 babel 转换之后 变成 es5 代码的js 但是 仍然是 commandJs 格式 浏览器是没有办法识别的 //新版的浏览器 es6 默认是 export 和 import 模式,而不是 node 的 commandJs 规范 所以需要 browserify 或者webpack //的二次转换 转换成 浏览器可以识别的代码,在浏览器 index.html 的 script 里面 调用 bundle.js 就可以了 //npx babel src/js -d dest/js --presets=babel-preset-env //-d directory //npx browserify dest/js/app.js -o dest/bundle.js //-o output
//这是一个完整的bundle.js (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ "use strict"; var t = require("./t"); t.say(); console.log(t); },{"./t":2}],2:[function(require,module,exports){ "use strict"; exports.age = 321; exports.how = function () { console.log("my age is " + this.age); }; module.exports = { name: "zs", say: function say() { console.log("my name is " + this.name); } }; //这里是注册 },{}]},{},[1]);
//生成bundle.js 之前的 app.js 代码如下: "use strict"; var t = require("./t"); t.say(); console.log(t); //t.js的代码如下: "use strict"; exports.age = 321; exports.how = function () { console.log("my age is " + this.age); }; module.exports = { name: "zs", say: function say() { console.log("my name is " + this.name); } }; //这里是注册