npm init 之package.json

npm系列:package.json 1、关于packag.json的基础知识 https://mp.weixin.qq.com/s/B3oppFdPYi6KD1zJhdv3XQ 2、npm发包流程 https://zhuanlan.zhihu.com/p/136603951 3、sh: vue-cli-service: command not found https://blog.csdn.net/Eva3288/article/details/106380896/ 一、在开发npm包,或者库的时候,package.j... 阅读详情

Package.json 属性说明

属性说明
name包名
version包的版本号
description包的描述
homepage包的官网 url
author包的作者姓名
contributors包的其他贡献者姓名
dependencies依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
devDependencies本地开发依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
repository包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上
mainmain 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")
keywords关键字

注意

npm install pulign --save-dev 就会生成devDependencies依赖对象
如果npm install pulign --save就会生成dependencies依赖对象而不会有devDependencies依赖对象

在package.json中

"devDependencies": {
  "autoprefixer": "^6.4.0"
}

^对版本宽松的限制只限制主版本号
例6.4.0 6.4.1 6.6.1 是属于同一版本,如果插件有版本更新,npm会自动更新。7.x.x则属于另外一个版本,如果插件更新npm不会自动更新

"devDependencies": {
  "autoprefixer": "~6.4.0"
}

~对版本严格的限制
例6.4.0和6.4.x是属于同一个版本如果插件有版本更新,npm会自动更新。但是6.4.x 6.5.x和7.x.x则属于另外一个版本如果插件更新npm不会自动更新

一、什么是 npm 脚本?

npm允许在package.json文件里面,使用scripts字段定义脚本命令。

"scripts": {
  "dev": "grunt test",
  "build": "grunt xxx"
}
  ```
运行`npm dev`相当于运行`grun grunt test`,运行`build`相当于运行`grunt xxx`

```js
{
  // ...
  "scripts": {
    "build": "node build.js"
  }
}

上面代码是package.json文件的一个片段,里面的scripts字段是一个对象。它的每一个属性,对应一段脚本。比如,build命令对应的脚本是node build.js。
命令行下使用npm run命令,就可以执行这段脚本

$ npm run build
等同于执行
$ node build.js

这些定义在package.json里面的脚本,就称为 npm 脚本。
它的优点很多。
* 项目的相关脚本,可以集中在一个地方。
* 不同项目的脚本命令,只要功能相同,就可以有同样的对外接口。用户不需要知道怎么测试你的项目,只要运行npm run test即可。
* 可以利用npm 提供的很多辅助功能。

查看当前项目的所有 npm 脚本命令,可以使用不带任何参数的npm run命令。

二、原理

npm 脚本的原理非常简单。每当执行npm run,就会自动新建一个Shell,在这个 Shell 里面执行指定的脚本命令。因此,只要是 Shell(一般是 Bash)可以运行的命令,就可以写在 npm 脚本里面。
比较特别的是,npm run新建的这个 Shell,会将当前目录的node_modules/.bin子目录加入PATH变量,执行结束后,再将PATH变量恢复原样。
这意味着,当前目录的node_modules/.bin子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。比如,当前项目的依赖里面有 Mocha,只要直接写mocha test就可以了。

"test": "mocha test"

而不用写成下面这样

"test": "./node_modules/.bin/mocha test"

由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。
npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是0,npm 就认为这个脚本执行失败。

三、通配符

由于 npm 脚本就是 Shell 脚本,因为可以使用 Shell 通配符。

"lint": "jshint *.js"
"lint": "jshint **/*.js"

上面代码中,表示任意文件名,*表示任意一层子目录。
如果要将通配符传入原始命令,防止被 Shell 转义,要将星号转义

"test": "tap test/\*.js"

四、传参

向 npm脚本传入参数,要使用–标明。

"lint": "jshint **.js"

向上面的npm run lint命令传入参数,必须写成下面这样

$ npm run lint --  --reporter checkstyle > checkstyle.xml

也可以在package.json里面再封装一个命令

"lint": "jshint **.js",
"lint:checkstyle": "npm run lint -- --reporter checkstyle > checkstyle.xml"

五、执行顺序

如果 npm 脚本里面需要执行多个任务,那么需要明确它们的执行顺序。如果是并行执行(即同时的平行执行),可以使用&符号。

$ npm run script1.js & npm run script2.js

如果是继发执行(即只有前一个任务成功,才执行下一个任务),可以使用&&符号。

$ npm run script1.js && npm run script2.js

六、默认值

一般来说,npm 脚本由用户提供。但是,npm 对两个脚本提供了默认值。也就是说,这两个脚本不用定义,就可以直接使用。

"start": "node server.js",
"install": "node-gyp rebuild"

上面代码中,npm run start的默认值是node server.js,前提是项目根目录下有server.js这个脚本;npm run install的默认值是node-gyp rebuild,前提是项目根目录下有binding.gyp文件。

七、钩子

npm 脚本有pre和post两个钩子。举例来说,build脚本命令的钩子就是prebuild和postbuild。

"prebuild": "echo I run before the build script",
"build": "cross-env NODE_ENV=production webpack",
"postbuild": "echo I run after the build script"

用户执行npm run build的时候,会自动按照下面的顺序执行。

npm run prebuild && npm run build && npm run postbuild

因此,可以在这两个钩子里面,完成一些准备工作和清理工作。下面是一个例子。

"clean": "rimraf ./dist && mkdir dist",
"prebuild": "npm run clean",
"build": "cross-env NODE_ENV=production webpack"

npm 默认提供下面这些钩子

prepost
prepublishpostpublish
preinstallpostinstall
preuninstallpostuninstall
preversionpostversion
pretestposttest
prestoppoststop
prestartpoststart
prerestartpostrestart

定义的脚本命令也可以加上pre和post钩子。比如,myscript这个脚本命令,也有premyscript和postmyscript钩子。不过,双重的pre和post无效,比如prepretest和postposttest是无效的。

npm提供一个npm_lifecycle_event变量,返回当前正在运行的脚本名称,比如pretest、test、posttest等等。所以,可以利用这个变量,在同一个脚本文件里面,为不同的npm scripts命令编写代码。请看下面的例子。

const TARGET = process.env.npm_lifecycle_event;
if (TARGET === 'test') {
  console.log(`Running the test task!`);
}
if (TARGET === 'pretest') {
  console.log(`Running the pretest task!`);
}
if (TARGET === 'posttest') {
  console.log(`Running the posttest task!`);
}

注意,prepublish这个钩子不仅会在npm publish命令之前运行,还会在npm install(不带任何参数)命令之前运行。这种行为很容易让用户感到困惑,所以 npm 4 引入了一个新的钩子prepare,行为等同于prepublish,而从 npm 5 开始,prepublish将只在npm publish命令之前运行。

八、简写形式

npm start是npm run start
npm stop是npm run stop的简写
npm test是npm run test的简写
npm restart是npm run stop && npm run restart && npm run start的简写

九、变量

npm 脚本有一个非常强大的功能,就是可以使用 npm 的内部变量。
首先,通过npm_package_前缀,npm 脚本可以拿到package.json里面的字段。比如,下面是一个package.json。

{
  "name": "foo", 
  "version": "1.2.5",
  "scripts": {
    "view": "node view.js"
  }
}

那么,变量npm_package_name返回foo,变量npm_package_version返回1.2.5。

// view.js
console.log(process.env.npm_package_name); // foo
console.log(process.env.npm_package_version); // 1.2.5

上面代码中,我们通过环境变量process.env对象,拿到package.json的字段值。如果是 Bash 脚本,可以用$npm_package_name和$npm_package_version取到这两个值。
npm_package_前缀也支持嵌套的package.json字段。

 "repository": {
    "type": "git",
    "url": "xxx"
  },
  scripts: {
    "view": "echo $npm_package_repository_type"
  }

上面代码中,repository字段的type属性,可以通过npm_package_repository_type取到

下面是另外一个例子。

"scripts": {
  "install": "foo.js"
}

上面代码中,npm_package_scripts_install变量的值等于foo.js。

然后,npm 脚本还可以通过npm_config_前缀,拿到 npm 的配置变量,即npm config get xxx命令返回的值。比如,当前模块的发行标签,可以通过npm_config_tag取到。

"view": "echo $npm_config_tag",

注意,package.json里面的config对象,可以被环境变量覆盖。

{ 
  "name" : "foo",
  "config" : { "port" : "8080" },
  "scripts" : { "start" : "node server.js" }
}

上面代码中,npm_package_config_port变量返回的是8080。这个值可以用下面的方法覆盖。

npm config set foo:port 80

最后,env命令可以列出所有环境变量。

"env": "env"

十、常用脚本示例

/ 删除目录
"clean": "rimraf dist/*",

// 本地搭建一个 HTTP 服务
"serve": "http-server -p 9090 dist/",

// 打开浏览器
"open:dev": "opener http://localhost:9090",

// 实时刷新
 "livereload": "live-reload --port 9091 dist/",

// 构建 HTML 文件
"build:html": "jade index.jade > dist/index.html",

// 只要 CSS 文件有变动,就重新执行构建
"watch:css": "watch 'npm run build:css' assets/styles/",

// 只要 HTML 文件有变动,就重新执行构建
"watch:html": "watch 'npm run build:html' assets/html",

// 部署到 Amazon S3
"deploy:prod": "s3-cli sync ./dist/ s3://example-com/prod-site/",

// 构建 favicon
"build:favicon": "node scripts/favicon.js",
2018南京大学计算机夏令营机试 1. Count number of binary strings without consecutive 1’s Given a positive integer n(3≤n≤90), count all possible distinct binary strings of length n such that there are no consecutive 1's . Examples... 阅读详情

相关推荐

保姆级教程:用Python从UCI下载波士顿房价数据集,手把手跑通线性回归、岭回归和Lasso

本文提供了一份保姆级教程,详细讲解如何用Python从UCI下载波士顿房价数据集,并手把手实现线性回归、岭回归和Lasso回归模型。内容涵盖数据获取、清洗、特征分析到模型构建与评估的全流程,特别适合机器学习初学者掌握波士顿房价预测这一经典案例。

weixin_34254848的博客 476

npm与package.json详解

1、npm是什么 npm是前端开发广泛使用的包管理工具,它让js开发者分享、复用代码更方便。可以重复的框架代码被称为包(package)或者模块(module),一个包可是是一个文件夹里放着几个文件夹,还有一个package.json文件。 npm的作用就是让我们把可复用的框架代码发布到一个地方,可以供大家一起使用。 2、安装npm npm是依赖node.js的,先去官网https://n...

西洲 2万+

从零构建智能ai语音助手:ESP32s3+Python+大语言模型实战指南

本文详细介绍了基于ESP32S3硬件和Python后端的智能语音助手系统开发指南。系统采用ESP32S3采集语音,通过WebSocket实时传输到Python后端处理,利用大语言模型实现自然语言理解和意图识别,再通过TTS合成语音返回。文章从系统架构、工作流程、技术实现(包括OPUS编码、WebSocket通信、ESP32音频处理)等方面进行了详细讲解,并提供了分阶段学习路线和常见问题解决方案。该项目展示了物联网技术与AI技术的融合应用,相比传统语音系统具有更高的灵活性和智能性,为开发者提供了完整的实现方案

Despacito0o的博客 2629

package.json字段全解

DESCRIPTION 本文档有所有package.json中必要的配置。它必须是真正的json,而不是js对象。 本文档中描述的很多行为都受npm-config(7)的影响。 name 在package.json中最重要的就是name和version字段。他们都是必须的,如果没有就无法install。name和version一起组成的标识在假设中是唯一的。改变包应该同时改变version...

weixin_34099526的博客 739

华大HC32F460串口超时中断+DMA收发实战:从STM32迁移的避坑指南

本文为从STM32迁移至华大HC32F460的开发者提供了串口DMA收发的实战避坑指南。核心在于理解HC32F460以串口接收超时中断替代空闲中断的机制,并调整DMA配置策略:DMA应设置为由串口接收事件持续触发搬运,超时中断仅负责通知和重置DMA,从而实现高效可靠的数据收发。

weixin_29175469的博客 113

详细介绍:国产操作系统银行麒麟V10的下载和安装

银河麒麟是由。银河麒麟已经发展为银河麒麟服务器操作系统、桌面操作系统、嵌入式操作系统、麒麟云、操作系统增值产品为代表的产品线。为攻克中国软件核心技术“卡脖子”的短板,银河麒麟建设自主的开源供应链,发起中国首个开源桌面操作系统根社区openKylin,银河麒麟操作系统以openKylin等自主根社区为依托,发布最新版本。

lz17267861157的博客 1万+

npm入门教程5:package.json

命令,npm 会询问一系列问题,如项目名称、版本、描述等。根据提示输入相应信息后,npm 会生成一个包含这些信息的。文件的创建、字段含义及常用命令,你可以更有效地管理 Node.js 项目的依赖和元数据。命令,npm 会使用默认值快速生成一个基本的。

1376

开源工具对比:5款主流大数据脱敏框架评测

数据脱敏(Data Masking/Anonymization),也称为数据漂白、数据去标识化,是指在不影响数据可用性的前提下,通过一定的技术手段对敏感信息进行处理,使其无法被识别或关联到具体个人或实体的过程。当应用程序向数据库写入数据(INSERT/UPDATE)时,ShardingSphere 会拦截 SQL,对配置了脱敏规则的字段,使用指定的算法进行加密/脱敏处理,然后将处理后的数据写入到。如果你的答案是“是”,那么数据脱敏,尤其是针对海量数据的。好的,各位技术同仁,数据安全领域的探索者们,大家好。

小程序开发 1184

npm init初始化不生成json文件

如果配置好了环境,还出现npm init指令后提示需要创建package.json 文件,像下面的提示: This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fie

weixin_46042888的博客 3655

快速傅里叶变换(FFT)的汇编实现在DSP开发中

在数字信号处理(Digital Signal Processing,DSP)开发中,使用汇编语言实现FFT可以进一步提高计算性能和优化系统资源的使用。FFT是一种分治算法,它通过将一个长度为N的离散时间域序列分解为多个长度为N/2的子序列,然后递归地进行计算。开发者可以根据实际需求,结合具体的硬件平台和编译器工具链,对FFT的汇编实现进行优化和定制化。需要注意的是,上述示例代码中只给出了FFT的基本框架,具体的合并操作及其他细节需要根据实际需求进行实现。上述示例代码演示了一个简单的FFT汇编实现。

QoTypescript的博客 683

[AI8051U入门第一步]环境安装和按键控制流水灯

本文介绍了AI8051U单片机的开发环境搭建及GPIO应用。主要内容包括:1)通过ISP软件完成Keil开发环境配置;2)AI8051U特性介绍,包括32位8051内核、浮点运算单元及丰富外设;3)GPIO输入输出模式解析,并附流水灯控制代码;4)提供完整的系统初始化、延时函数及LED控制代码实现。文章配套资源包含完整工程代码,适用于智能硬件及物联网开发。

sinat_58149788的博客 670

npm init 创建 package.json

npm init 创建 package.json 1. 背景故事 在很久很久以前,dk 要开发一个前端项目,在计算机的某个旮沓地方建立了一个文件夹叫 dk_project,就称为这是一个“项目”了。 又过了很久,dk 离开了公司,来了位新同事,在接手 dk 工作的时候发现计算机上面的 dk_project 文件夹,因为没有任何明显的 标识,就被当成普通文件夹给 DELETE 掉了。 回到现代,随着...

Andrelia的博客 1835

浏览器解析HTML的过程及编程实现

需要注意的是,上述示例代码只是简化的演示,并未涵盖浏览器解析HTML的所有细节和复杂性。实际上,浏览器的HTML解析引擎还会处理一系列的特殊情况、错误容错和性能优化等方面的内容,以确保能够正确解析各种类型的HTML代码。HTML(超文本标记语言)是构建网页的基础语言,浏览器负责将HTML代码解析并渲染成可视化的网页。本文将详细介绍浏览器解析HTML的过程,并提供相应的编程示例代码。希望以上内容能帮助您理解浏览器解析HTML的过程,并通过提供的示例代码更好地了解如何在编程中实现这一过程。

ByteJolt的博客 321

npm init 完全指南:用 npm 从零创建 package.json 与脚手架项目

`npm init` 是 npm 中最常用的初始化命令,用于为新建或已存在的 npm 包生成 `package.json`,它同时具备两种截然不同的能力:一是直接调用形如 `create-<initializer>` 的脚手架包来搭建项目(内部转换为 `npm exec`),二是通过交互式问答(或 `-y` 免问答)生成基础 `package.json`。本文以官方文档 [npm-init.md]

gitblog_00939的博客 796

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

npm init 以及package.json 字段学习

npm init 以及package.json 字段学习

qq_44173499的博客 286

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

npm init 命令生成package.json文件

通过npm init 命令可以生成一个package.json文件。这个文件是 整个项目的描述文件。通过这个文件可以清楚的知道项目的包依赖关系,版本,作者等信息。每个NPM包都有自己的package.json文件,使用这个命令将需要填写项目名,版本号,作者等信息。执行npm init -y这样将会使用默认值生成package.json文件 转载于:https://www.cnblog...

weixin_30455661的博客 412

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

npm init 自动创建 package.json 文件

一般的项目根目录下都有一个package.json文件,文件定义了项目的配置信息,还有一些需要的模块,我们可以自己创建这个文件,命名为package.json ;也可以通过npm 的npm init命令快速自动创建这个文件中间会让你输入一些参数信息,自己根据需要写, 最后 is this ok ? 输入yes即可;如果我们在package.json 中配置了需要的各种模块,那么随后执行:npm i...

cvper's world ! 6876

npm install、npm init、npm update、npm uninstall和package.json

package.lock.json: 作用:其实用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致 在以前可能就是直接改package.json里面的版本,然后再npm install了,但是5版本后就不支持这样做了,因为版本已经锁定在package-lock.json里了,所以我们只能npm install xx...

Gytha_1的博客 3020

如何用lyo init改造package.json:prepublishOnly钩子让每次npm publish自动编译发布

**lyo** 是一个"零配置"的 Node.js 模块转浏览器库工具,一条 `lyo init` 命令就能改造你的 `package.json`:自动写入 `prepublishOnly` 钩子,让每次执行 `npm publish` 时都自动完成打包、压缩与发布,从此告别"忘记编译导致浏览器用户拿到坏包"的经典事故。 ## 一、30秒认识 lyo 是什么 lyo(取"冻干"之意:lyoph

gitblog_00732的博客 1097

npm中的.package-lock.json包管理配置文件 package.json自己创建的包配置文件(npm init -y)

即可用来记录项目中安装了哪些包,从而方便在我们剔除node_modules目录之后。-------------------根据这个安装包。会出现这种情况:整个项目的体积是30M 第三方包即node_modules文件夹的体积是28M,所以我们项目源代码才2M——.package-lock.json包管理配置文件,是npm官方规定的必须提供的,用来记录与项目有关的一些配置的信息。(记录项目中安装了哪些包)解决方案: 在项目根目录中,创建一个。——在执行命令所处的目录中,快速新建。...

weixin_47295886的博客 842

使用npm init生成package.json

一次安装三个包 npm install --save npm init 将自动生成package.json文件: 指定入口文件: npm install

学亮编程手记 2960

npm init初始化项目package.json文件详解

{ "name": "asset_manage", //项目名称 "version": "0.1.0", //项目版本 "private": true, //是否是私有项目 "scripts": { //npm快捷执行命令脚本配置 "start": "npm run serve", "serve":...

weixin_30663471的博客 1338
上一篇: grunt压缩雪碧图
下一篇: 常用的dos命令
chentian888
博客等级 码龄11年 16粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值