模块化之commonjs

110 阅读4分钟

1.安装node(windows可以安装nvm-windows用来管理node)

查看本地安装的node和npm版本,npm默认是node的包管理工具

image.png

安装的包都在node_modules文件夹内,node_modules文件夹内有.cache文件夹记录缓存内容

2.package.json文件解释

{
  "name": "cloud-polymerize",
  "version": "8.1.0",
  "private": true,
  "main": "lib/index.min.js",
  "module": "lib/index.esm.js",
  "types": "lib/index.d.ts",
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/jd-opensource/micro-app.git"
  },
  "keywords": [
    "webcomponents",
    "micro-frontend",
    "microapp"
  ],
  "files": [
    "es",
    "lib",
    "polyfill",
    "plugins",
    "typings"
  ],
  "author": "cangdu",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/jd-opensource/micro-app/issues"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "lint-staged": {
    "**/*.{js,ts}": [
      "yarn lint"
    ]
  },
  "dependencies": {
    "throttle-debounce": "^1.1.0",
    "vue": "~2.6.14",
  },
  "devDependencies": {
    "uglifyjs-webpack-plugin": "^2.2.0",
    "vue-template-compiler": "~2.6.14",
    "webpack": "^4.46.0"
  }
}

3.package.json版本号

^2.6.3 保留x,升级 y和z
~2.6.3 保留x和y,升级z
2.6.3 保留x,y,z
>=2.6.3 大于2.6.3的任何版本

4.npm指令

npm init -y 初始化package.json文件
npm install 和npm uninstall 安装和卸载
npm update vue
npm install vue@x.y.x 指定版本号
-g === --global 全局安装
--save === -S 安装到dependencies中
--save-dev === -D 安装到devDependencies
npm list 查看本地安装的包
npm list -g 查看全局安装的包
npm list vue 查看本地vue安装的版本
npm view vue 查看vue包的信息 基本等价于info
npm info vue 查看vue包的信息

第一步:配置npm仓库地址

npm config set <key> <value> 设置一个npm配置项的值
npm config set registry url 设置npm 镜像地址
npm config get <key> 得到一个npm配置项的值
npm config delete <key> 删除一个npm配置项的值

第二步:登录npm仓库的注册用户

npm login 登录npm仓库
npm logout 登出npm仓库 npm whoami 查看当前npm登录用户

第三步:发布

npm publish npm unpublish 发布包到npm仓库 在npm仓库删除指定的包
npm cache clean 清除npm缓存
npm run scriptsName 运行script指令

5.运行scripts指令

运行serve指令时,可以动态传参
npm run serve -- arg1 arg2
process.argv是个数组,process.argv.slice(2) 可以获取参数
process.argv === ['vue-cli-service','serve',arg1,arg2]按下图所示
-- 是必需的,它告诉 npm 将后面的参数传递给脚本而不是作为 npm 命令的选项。 arg之间空格隔开,代表多个参数 image.png

scripts中命令语句

key:value,value是可以执行的脚本命令 image.png 在 package.json 文件中的 scripts 部分,你可以定义一系列脚本命令,这些命令可以通过 npm run <script-name> 来执行。scripts 中的执行语句可以包含多种形式,以下是一些常见的形式和示例:

1. 直接执行 Node.js 脚本

json复制代码
    "scripts": {
      "start": "node index.js"
    }

这里,start 是脚本名称,node index.js 是实际要运行的命令。

2. 使用 npm 包提供的命令行工具

json复制代码
    "scripts": {
      "build": "vue-cli-service build"
    }

在这个例子中,vue-cli-service build 是 Vue CLI 提供的构建命令。

3. 串行执行多个命令

使用 && 来连接多个命令,前一个命令执行成功才会执行后面的命令。

json复制代码
    "scripts": {
      "deploy": "npm run build && scp -r dist/* user@example.com:/path/to/server"
    }

这里,deploy 脚本首先运行 npm run build,如果成功,则执行 scp 命令将构建好的文件部署到服务器。

4. 并行执行多个命令

使用 & 来同时执行多个命令(注意:在 Windows 上可能不支持这种方式,Windows 用户可以使用 npm-run-all 或类似的库来实现并行执行)。

json复制代码
    "scripts": {
      "dev": "nodemon index.js & webpack -w"
    }

在这个例子中,nodemon index.js 和 webpack -w 会同时运行。但请注意,由于跨平台兼容性问题,这种方式可能并不总是可行。

5. 使用环境变量

你可以在脚本中设置和使用环境变量。例如,使用 cross-env(一个跨平台的设置环境变量的库)来设置环境变量:

json复制代码
	"scripts": {
	  "start": "cross-env NODE_ENV=production node index.js"
	}

在这个例子中,cross-env 用于设置 NODE_ENV 环境变量为 production,然后执行 node index.js

6. 引用 package.json 中的字段

通过 npm_package_ 前缀,npm 脚本可以访问 package.json 中的字段。例如:

json复制代码
    "scripts": {
      "view": "echo $npm_package_name"
    }

在这个例子中,脚本会打印出 package.json 中的 name 字段的值。

7. 使用自定义变量

你可以在 package.json 的 config 字段中定义自定义变量,并在脚本中引用它们:

json复制代码
    "config": {
      "port": "3000"
    },

    "scripts": {
      "start": "node index.js --port=$npm_package_config_port"
    }

在这个例子中,port 是一个自定义变量,其值在脚本中通过 $npm_package_config_port 引用。

8. 调用其他 npm 脚本

在 package.json 中,虽然你不能直接“调用”另一个 npm 脚本,但 npm 提供了一些生命周期钩子,允许你在执行某个脚本之前或之后自动运行其他脚本。这些钩子包括 pre<script>post<script>, 以及 <script>-script(后者较少使用)。

以下是如何利用这些钩子来“间接调用”其他 npm 脚本的示例:

使用 pre 和 post 钩子

npm 支持在每个脚本名称前添加 pre 或 post 前缀来定义要在该脚本执行之前或之后运行的钩子脚本。

json复制代码
    "scripts": {
      "prebuild": "echo 'Running pre-build tasks...'",
      "build": "webpack",
      "postbuild": "echo 'Build completed!'"
    }

在这个例子中,当你运行 npm run build 时,npm 会首先执行 prebuild 脚本,然后执行 build 脚本,最后执行 postbuild 脚本。