This commit is contained in:
xugaoyi 2020-04-09 16:10:25 +08:00
parent 2deb29cb12
commit b52948498a
11 changed files with 663 additions and 25 deletions

View File

@ -1,4 +1,4 @@
<p align="center"><a href="https://xugaoyi.com/" target="_blank" rel="noopener noreferrer"><img width="150" src="https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200407145524.png" alt="logo"></a></p>
<p align="center"><a href="https://xugaoyi.com/" target="_blank" rel="noopener noreferrer"><img width="180" src="https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200409124835.png" alt="logo"></a></p>
<p align="center">
<a href="https://github.com/xugaoyi/vuepress-theme-vdoing-blog/actions?query=workflow%3ACI"><img src="https://github.com/xugaoyi/vuepress-theme-vdoing-blog/workflows/CI/badge.svg" alt="CI"></a>
@ -78,6 +78,7 @@
[首页配置](https://github.com/xugaoyi/vuepress-theme-vdoing-blog/issues/338)
7. 多种颜色模式供用户选择:**跟随系统**、**浅色模式**、**深色模式**、**阅读模式**
[palette.styl主题调色板使用说明](https://github.com/xugaoyi/vuepress-theme-vdoing-blog/issues/345s)
## Start 开始

View File

@ -19,7 +19,7 @@ module.exports = {
// ['script', { src: 'https://cdn.jsdelivr.net/npm/@babel/standalone/babel.min.js' }],
],
markdown: {
// lineNumbers: true // 代码行号
lineNumbers: true // 代码行号
},
theme: require.resolve('../../theme-vdoing'), // 使用的主题
themeConfig: { // 主题配置
@ -77,7 +77,7 @@ module.exports = {
// excludeClassName: 'theme-vdoing-content' // 要排除元素的class, 默认空''
// }],
[require('./plugins/title-badge'), { // h1标题徽章
// badges: [ // 替换默认的徽章图标
// badges: [ // 替换默认的徽章图标,可选
// 'data:image/png;base64,**',
// 'data:image/png;base64,***',
// ]

View File

@ -13,7 +13,7 @@ module.exports = {
"/02.页面/": [{"title":"HTML","collapsable":false,"children":[["10.HTML/10.常用meta整理.md","常用meta整理","/pages/8309a5b876fc95e3"]]},{"title":"CSS","collapsable":false,"children":[["20.CSS/01.flex布局语法.md","flex布局语法","/pages/0a83b083bdf257cb"],["20.CSS/02.flex布局案例-基础.md","flex布局案例-基础","/pages/ea6db1530c42ad51"],["20.CSS/03.flex布局案例-骰子.md","flex布局案例-骰子","/pages/eff61bc8b4f4695d"],["20.CSS/04.flex布局案例-圣杯布局.md","flex布局案例-圣杯布局","/pages/df9e7c7214fa5046"],["20.CSS/05.flex布局案例-网格布局.md","flex布局案例-网格布局","/pages/85b5a3fe218a34b7"],["20.CSS/06.flex布局案例-输入框布局.md","flex布局案例-输入框布局","/pages/05cc577fb51c7998"],["20.CSS/07.CSS3之transition过渡.md","CSS3之transition过渡","/pages/02d7f59d98d87409"],["20.CSS/08.CSS3之animation动画.md","CSS3之animation动画","/pages/c2c0432138f6e042"],["20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md","「布局技巧」图片未加载前自动撑开元素高度","/pages/3d52574260725aea"],["20.CSS/30.文字在一行或两行时超出显示省略号.md","文字在一行或两行时超出显示省略号","/pages/42b66999cc27dc25"],["20.CSS/35.从box-sizing属性入手了解盒子模型.md","从box-sizing属性入手了解盒子模型","/pages/20a978023139589d"],["20.CSS/40.水平垂直居中的几种方式-案例.md","水平垂直居中的几种方式-案例","/pages/cb7cb251adba4bf7"],["20.CSS/45.如何根据系统主题自动响应CSS深色模式.md","如何根据系统主题自动响应CSS深色模式","/pages/5dde351274f1e39d"]]},{"title":"stylus","collapsable":false,"children":[["25.stylus/10.混入(Mixins).md","混入(Mixins)","/pages/9f15c1a281d8bedb"]]}],
"/03.技术/": [{"title":"技术文档","collapsable":false,"children":[["01.技术文档/01.Git使用手册.md","Git使用手册","/pages/9a7ee40fc232253e"],["01.技术文档/02.Markdown使用教程.md","Markdown使用教程","/pages/ad247c4332211551"],["01.技术文档/03.npm常用命令.md","npm常用命令","/pages/61f2f95fd7da14fd"],["01.技术文档/04.yaml语言教程.md","yaml语言教程","/pages/4e8444e2d534d14f"]]},{"title":"GitHub技巧","collapsable":false,"children":[["02.GitHub技巧/01.GitHub高级搜索技巧.md","GitHub高级搜索技巧","/pages/4c778760be26d8b3"],["02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md","GitHub Actions 实现自动部署静态博客","/pages/6b9d359ec5aa5019"],["02.GitHub技巧/03.GitHub Actions 定时运行代码:每天定时百度链接推送.md","GitHub Actions 定时运行代码:每天定时百度链接推送","/pages/f44d2f9ad04ab8d3"],["02.GitHub技巧/10.GitHub加速下载项目的方法.md","GitHub加速下载项目的方法","/pages/95331c6a9613faf8"]]},{"title":"Nodejs","collapsable":false,"children":[["03.Nodejs/01.nodejs递归读取所有文件.md","nodejs递归读取所有文件","/pages/117708e0af7f0bd9"]]},{"title":"博客搭建","collapsable":false,"children":[["04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md","解决百度无法收录搭建在GitHub上的个人博客的问题","/pages/41f87d890d0a02af"],["04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md","使用Gitalk实现静态博客无后台评论系统","/pages/1da0bf9a988eafe5"],["04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md","GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床","/pages/a5f73af5185fdf0a"],["04.博客搭建/10.vdoing主题效果图.md","vdoing主题效果图","/pages/d557b9a89a215d2e"]]}],
"/03.技术/": [{"title":"技术文档","collapsable":false,"children":[["01.技术文档/01.Git使用手册.md","Git使用手册","/pages/9a7ee40fc232253e"],["01.技术文档/02.Markdown使用教程.md","Markdown使用教程","/pages/ad247c4332211551"],["01.技术文档/03.npm常用命令.md","npm常用命令","/pages/61f2f95fd7da14fd"],["01.技术文档/10.npm packageJson属性详解.md","npm packageJson属性详解","/pages/dec4f3f00e71a312"],["01.技术文档/15.yaml语言教程.md","yaml语言教程","/pages/4e8444e2d534d14f"]]},{"title":"GitHub技巧","collapsable":false,"children":[["02.GitHub技巧/01.GitHub高级搜索技巧.md","GitHub高级搜索技巧","/pages/4c778760be26d8b3"],["02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md","GitHub Actions 实现自动部署静态博客","/pages/6b9d359ec5aa5019"],["02.GitHub技巧/03.GitHub Actions 定时运行代码:每天定时百度链接推送.md","GitHub Actions 定时运行代码:每天定时百度链接推送","/pages/f44d2f9ad04ab8d3"],["02.GitHub技巧/10.GitHub加速下载项目的方法.md","GitHub加速下载项目的方法","/pages/95331c6a9613faf8"]]},{"title":"Nodejs","collapsable":false,"children":[["03.Nodejs/01.nodejs递归读取所有文件.md","nodejs递归读取所有文件","/pages/117708e0af7f0bd9"]]},{"title":"博客搭建","collapsable":false,"children":[["04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md","解决百度无法收录搭建在GitHub上的个人博客的问题","/pages/41f87d890d0a02af"],["04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md","使用Gitalk实现静态博客无后台评论系统","/pages/1da0bf9a988eafe5"],["04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md","GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床","/pages/a5f73af5185fdf0a"],["04.博客搭建/10.vdoing主题效果图.md","vdoing主题效果图","/pages/d557b9a89a215d2e"]]}],
"/04.更多/": [{"title":"学习","collapsable":false,"children":[["01.学习/02.提高学习效率的策略.md","提高学习效率的策略","/pages/a8692ab3bdcb4588"],["01.学习/03.提高记忆的技巧.md","提高记忆的技巧","/pages/996822b2a2ca6e3b"],["01.学习/04.自律小建议.md","自律小建议","/pages/c3f302a03c8daf79"],["01.学习/05.处理问题的思路.md","处理问题的思路","/pages/9ba2b8fb13de1957"]]},{"title":"面试","collapsable":false,"children":[["03.面试/01.面试问题集锦.md","面试问题集锦","/pages/aea6571b7a8bae86"]]},{"title":"英语","collapsable":false,"children":[["04.英语/01.英语基础.md","英语基础","/pages/6f9525eecdd51d5a"]]},{"title":"心情杂货","collapsable":false,"children":[["05.心情杂货/01.一个完美主义者的自我救赎.md","一个完美主义者的自我救赎","/pages/2d615df9a36a98ed"]]},["97.学习网站.md","学习网站","/pages/2e9ba3fa6e1ed0e9"],["98.在线工具.md","在线工具","/pages/9c2232288caaa8ec"],["99.友情链接.md","友情链接","/pages/844eea1b2387fb96"]],

View File

@ -1,29 +1,64 @@
//
//
$accentColor = #3eaf7c //
$textColor = #2c3e50 //
$borderColor = #eaecef //
$codeBgColor = #282c34 //
$arrowBgColor = #ccc //
$badgeTipColor = #42b983 //
$badgeWarningColor = darken(#ffe564, 35%) //
$badgeErrorColor = #DA5961 //
//
//
//
// $accentColor = #3eaf7c
// $textColor = #2c3e50
// $borderColor = #eaecef
// $codeBgColor = #282c34
// $arrowBgColor = #ccc
// $badgeTipColor = #42b983
// $badgeWarningColor = darken(#ffe564, 35%)
// $badgeErrorColor = #DA5961
//
// $navbarHeight = 3.6rem
// $sidebarWidth = 20rem
// $contentWidth = 740px
// $homePageWidth = 960px
//
// $lineNumbersWrapperWidth = 3.5rem
//
//
$accentColor = #11A8CD
$textColor = #004050
$borderColor = rgba(0,0,0,.1)
$badgeTipColor = #11A8CD
//
$sidebarWidth = 18rem
$contentWidth = 830px
$rightMenuWidth = 280px //
$lineNumbersWrapperWidth = 2.5rem
/**
* vdoing$textColor$borderColor$codeBgColor
* "--"
* vdoing
*/
// //
// .theme-mode-light
// --bg: #fff
// --textColor: #004050
// --textLightenColor: #0085AD
// --borderColor: rgba(0,0,0,.15)
// --codeBgColor: #f6f6f6
// --codeColor: #525252
// codeThemeLight()
// //
// .theme-mode-dark
// --bg: rgb(30,30,34)
// --textColor: rgb(150,150,154)
// --textLightenColor: #0085AD
// --borderColor: #2C2C3A
// --codeBgColor: #252526
// --codeColor: #fff
// codeThemeDark()
// //
// .theme-mode-read
// --bg: #f5f5d5 //
// --textColor: #004050
// --textLightenColor: #0085AD
// --borderColor: rgba(0,0,0,.15)
// --codeBgColor: #282c34
// --codeColor: #fff
// codeThemeDark()

View File

@ -0,0 +1,589 @@
---
author:
name: "TZYY"
link: "https://www.cnblogs.com/tzyy/p/5193811.html"
title: "npm packageJson属性详解"
date: "2020-04-08 17:16:38"
permalink: "/pages/dec4f3f00e71a312"
---
# npm package.json属性详解
> 本文转自<https://www.cnblogs.com/tzyy/p/5193811.html>作者TZYY
## 概述
`package.json`必须是一个严格的json文件而不仅仅是js里边的一个对象。其中很多属性可以通过`npm-config`来生成
## name
`package.json`中最重要的属性是`name`和`version`两个属性这两个属性是必须要有的否则模块就无法被安装这两个属性一起形成了一个npm模块的唯一标识符。模块中内容变更的同时模块版本也应该一起变化。
`name`属性就是你的模块名称,下面是一些命名规则:
- `name`必须小于等于214个字节包括前缀名称在内如 xxx/xxxmodule
- `name`不能以"_"或"."开头
- 不能含有大写字母
- `name`会成为url的一部分不能含有url非法字符
下面是官网文档的一些建议:
- 不要使用和node核心模块一样的名称
- `name`中不要含有"js"和"node"。 It's assumed that it's js, since you're writing a package.json file, and you can specify the engine using the "engines" field. (See below.)
- `name`属性会成为模块url、命令行中的一个参数或者一个文件夹名称任何非url安全的字符在name中都不能使用也不能以"_"或"."开头
- `name`属性也许会被写在`require()`的参数中,所以最好取个简短而语义化的值。
- 创建一个模块前可以先到后边的网址查查`name`是否已经被占用. <https://www.npmjs.com/>
- ```sh
# 发布一个包的时候,需要检验某个包名是否存在
npm search <ModuleName>
```
`name`属性可以有一些前缀如 e.g. @myorg/mypackage.在npm-scope(7)的文档中可以看到详细说明
## version
`version`必须可以被npm依赖的一个`node-semver`模块解析。具体规则见下面的`dependencies`模块
## description
一个描述,方便别人了解你的模块作用,搜索的时候也有用。
## keywords
一个字符串数组,方便别人搜索到本模块
## homepage
项目主页url
**注意:** 这个项目主页url和url属性不同如果你填写了url属性npm注册工具会认为你把项目发布到其他地方了获取模块的时候不会从npm官方仓库获取而是会重定向到url属性配置的地址。
(原文档中用了 spit(吐)这个单词,作者表示他不是在开玩笑:
## bugs
填写一个bug提交地址或者一个邮箱被你的模块坑到的人可以通过这里吐槽例如
```json
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
```
url和email可以任意填或不填如果只填一个可以直接写成一个字符串而不是对象。如果填写了urlnpm bugs命令会使用这个url。
## license
你应该为你的模块制定一个协议让用户知道他们有何权限来使用你的模块以及使用该模块有哪些限制。最简单的例如你用BSD-3-Clause 或 MIT之类的协议如下
```json
{ "license" : "MIT" }
```
你可以在[https://spdx.org/licenses/ ](https://spdx.org/licenses/)这个地址查阅协议列表 。
## 和用户相关的属性: author, contributors
`author`是一个码农, `contributors`是一个码农数组。 `person`是一个有一些描述属性的对象,如下 like this:
```json
{
"name" : "Barney Rubble",
"email" : "b@rubble.com",
"url" : "http://barnyrubble.tumblr.com/"
}
```
也可以按如下格式缩写npm会帮着转换:
```
"Barney Rubble b@rubble.com (http://barnyrubble.tumblr.com/)"
```
`email`和`url`属性实际上都是可以省略的。描述用户信息的还有一个`maintainers`(维护者)属性。
## files
`files`属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是文件夹名,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
你也可以在模块根目录下创建一个`.npmignore`文件windows下无法直接创建以"."开头的文件使用linux命令行工具创建如git bash写在这个文件里边的文件即便被写在files属性里边也会被排除在外这个文件的写法".gitignore"类似。
## main
`main`属性指定了程序的主入口文件。意思是如果你的模块被命名为foo用户安装了这个模块并通过require("foo")来使用这个模块那么require返回的内容就是main属性指定的文件中 module.exports指向的对象。
它应该指向模块根目录下的一个文件。对大对数模块而言,这个属性更多的是让模块有一个主入口文件,然而很多模块并不写这个属性。
## bin
很多模块有一个或多个需要配置到PATH路径下的可执行模块npm让这个工作变得十分简单实际上npm本身也是通过bin属性安装为一个可执行命令的
如果要用npm的这个功能在package.json里边配置一个bin属性。bin属性是一个已命令名称为key本地文件名称为value的map如下
```json
{
"bin" : { "myapp" : "./cli.js" }
}
```
模块安装的时候若是全局安装则npm会为bin中配置的文件在bin目录下创建一个软连接对于windows系统默认会在C:\Users\username\AppData\Roaming\npm目录下若是局部安装则会在项目内的./node_modules/.bin/目录下创建一个软链接。
因此按上面的例子当你安装myapp的时候npm就会为cli.js在/usr/local/bin/myapp路径创建一个软链接。
如果你的模块只有一个可执行文件,并且它的命令名称和模块名称一样,你可以只写一个字符串来代替上面那种配置,例如:
```json
{
"name": "my-program",
"version": "1.2.5",
"bin": "./path/to/program"
}
```
作用和如下写法相同:
```json
{
"name": "my-program",
"version": "1.2.5",
"bin" : {
"my-program" : "./path/to/program"
}
}
```
## man
制定一个或通过数组制定一些文件来让linux下的man命令查找文档地址。
如果只有一个文件被指定的话安装后直接使用man+模块名称而不管man指定的文件的实际名称。例如:
```json
{
"name" : "foo",
"version" : "1.2.3",
"description" : "A packaged foo fooer for fooing foos",
"main" : "foo.js",
"man" : "./man/doc.1"
}
```
通过man foo命令会得到 ./man/doc.1 文件的内容。
如果man文件名称不是以模块名称开头的安装的时候会给加上模块名称前缀。因此下面这段配置
```json
{
"name" : "foo",
"version" : "1.2.3",
"description" : "A packaged foo fooer for fooing foos",
"main" : "foo.js",
"man" : [ "./man/foo.1", "./man/bar.1" ]
}
```
会创建一些文件来作为man foo和man foo-bar命令的结果。
man文件必须以数字结尾或者如果被压缩了以.gz结尾。数字表示文件将被安装到man的哪个部分。
```json
{
"name" : "foo",
"version" : "1.2.3",
"description" : "A packaged foo fooer for fooing foos",
"main" : "foo.js",
"man" : [ "./man/foo.1", "./man/foo.2" ]
}
```
会创建 man foo 和 man 2 foo 两条命令。
## directories
CommonJs通过directories来制定一些方法来描述模块的结构看看npm的package.json文件https://registry.npmjs.org/npm/latest ,可以发现里边有这个字段的内容。
![img](http://zoucz.com/blogimgs/2016-02-16/1455624810992.png)
目前这个配置没有任何作用,将来可能会整出一些花样来。
### directories.lib
告诉用户模块中lib目录在哪这个配置目前没有任何作用但是对使用模块的人来说是一个很有用的信息。
### directories.bin
如果你在这里指定了bin目录这个配置下面的文件会被加入到bin路径下如果你已经在package.json中配置了bin目录那么这里的配置将不起任何作用。
### directories.man
指定一个目录目录里边都是man文件这是一种配置man文件的语法糖。
### directories.doc
在这个目录里边放一些markdown文件可能最终有一天它们会被友好的展现出来应该是在npm的网站上
### directories.example
放一些示例脚本,或许某一天会有用 - -
## repository
指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助。像这样:
```json
"repository" :
{
"type" : "git",
"url" : "https://github.com/npm/npm.git"
}
"repository" :
{
"type" : "svn",
"url" : "https://v8.googlecode.com/svn/trunk/"
}
```
若你的模块放在GitHub, GitHub gist, Bitbucket, or GitLab的仓库里npm install的时候可以使用缩写标记来完成
```json
"repository": "npm/npm"
"repository": "gist:11081aaa281"
"repository": "bitbucket:example/repo"
"repository": "gitlab:another/repo"
```
## scripts
scripts属性是一个对象里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件value是要执行的命令。
具体的内容有 install start stop 等,详见[ https://docs.npmjs.com/misc/scripts](https://docs.npmjs.com/misc/scripts)
## config
用来设置一些项目不怎么变化的项目配置例如port等。
用户用的时候可以使用如下用法:
```json
http.createServer(...).listen(process.env.npm_package_config_port)
```
可以通过npm config set foo:port 80来修改config。详见<https://docs.npmjs.com/misc/config>
```json
{
"name" : "foo",
"config" : { "port" : "8080" }
}
```
## dependencies
dependencies属性是一个对象配置模块依赖的模块列表key是模块名称value是版本范围版本范围是一个字符可以被一个或多个空格分割。
dependencies也可以被指定为一个git地址或者一个压缩包地址。
不要把测试工具或transpilers写到dependencies中。 下面是一些写法,详见<https://docs.npmjs.com/misc/semver>
- version 精确匹配版本
- \>version 必须大于某个版本
- \>=version 大于等于
- <version 小于
- <=versionversion 小于
- ~version "约等于"具体规则详见semver文档
- ^version "兼容版本"具体规则详见semver文档
- 1.2.x 仅一点二点几的版本
- http://... 见下面url作为denpendencies的说明
- - 任何版本
- "" 空字符,和*相同
- version1 - version2 相当于 >=version1 <=version2.
- range1 || range2 范围1和范围2满足任意一个都行
- git... 见下面git url作为denpendencies的说明
- user/repo See 见下面GitHub仓库的说明
- tag 发布的一个特殊的标签见npm-tag的文档 <https://docs.npmjs.com/getting-started/using-tags>
- path/path/path 见下面本地模块的说明
下面的写法都是可以的:
```json
{ "dependencies" :
{ "foo" : "1.0.0 - 2.9999.9999"
, "bar" : ">=1.0.2 <2.1.2"
, "baz" : ">1.0.2 <=2.3.4"
, "boo" : "2.0.1"
, "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
, "asd" : "http://asdf.com/asdf.tar.gz"
, "til" : "~1.2"
, "elf" : "~1.2.3"
, "two" : "2.x"
, "thr" : "3.3.x"
, "lat" : "latest"
, "dyl" : "file:../dyl"
}
}
```
## URLs as Dependencies
在版本范围的地方可以写一个url指向一个压缩包模块安装的时候会把这个压缩包下载下来安装到模块本地。
## Git URLs as Dependencies
Git url可以像下面一样:
```
git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish
```
commit-ish 可以是任意标签哈希值或者可以检出的分支默认是master分支。
## GitHub URLs
支持github的 username/modulename 的写法,#后边可以加后缀写明分支hash或标签
```json
{
"name": "foo",
"version": "0.0.0",
"dependencies": {
"express": "visionmedia/express",
"mocha": "visionmedia/mocha#4727d357ea"
}
}
```
## Local Paths
npm2.0.0版本以上可以提供一个本地路径来安装一个本地的模块通过npm install xxx --save 来安装,格式如下:
```
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
```
package.json 生成的相对路径如下:
```json
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
```
这种属性在离线开发或者测试需要用npm install的情况又不想自己搞一个npm server的时候有用但是发布模块到公共仓库时不应该使用这种属性。
## devDependencies
如果有人想要下载并使用你的模块,也许他们并不希望或需要下载一些你在开发过程中使用的额外的测试或者文档框架。
在这种情况下最好的方法是把这些依赖添加到devDependencies属性的对象中。
这些模块会在npm link或者npm install的时候被安装也可以像其他npm配置一样被管理详见npm的config文档。
对于一些跨平台的构建任务例如把CoffeeScript编译成JavaScript就可以通过在package.json的script属性里边配置prepublish脚本来完成这个任务然后需要依赖的coffee-script模块就写在devDependencies属性种。
例如:
```json
{ "name": "ethopia-waza",
"description": "a delightfully fruity coffee varietal",
"version": "1.2.3",
"devDependencies": {
"coffee-script": "~1.6.3"
},
"scripts": {
"prepublish": "coffee -o lib/ -c src/waza.coffee"
},
"main": "lib/waza.js"
}
```
prepublish脚本会在发布之前运行因此用户在使用之前就不用再自己去完成编译的过程了。在开发模式下运行npm install也会执行这个脚本见npm script文档因此可以很方便的调试。
## peerDependencies
有时候做一些插件开发比如grunt等工具的插件它们往往是在grunt的某个版本的基础上开发的而在他们的代码中并不会出现require("grunt")这样的依赖dependencies配置里边也不会写上grunt的依赖为了说明此模块只能作为插件跑在宿主的某个版本范围下可以配置peerDependencies
```json
{
"name": "tea-latte",
"version": "1.3.5",
"peerDependencies": {
"tea": "2.x"
}
}
```
上面这个配置确保再npm install的时候tea-latte会和2.x版本的tea一起安装而且它们两个的依赖关系是同级的
├── tea-latte@1.3.5
└── tea@2.2.0
这个配置的目的是让npm知道如果要使用此插件模块请确保安装了兼容版本的宿主模块。
## bundledDependencies
上面的单词少个d写成bundleDependencies也可以。
指定发布的时候会被一起打包的模块。
## optionalDependencies
如果一个依赖模块可以被使用, 同时你也希望在该模块找不到或无法获取时npm继续运行你可以把这个模块依赖放到optionalDependencies配置中。这个配置的写法和dependencies的写法一样不同的是这里边写的模块安装失败不会导致npm install失败。
当然,这种模块就需要你自己在代码中处理模块确实的情况了,例如:
```js
try {
var foo = require('foo')
var fooVersion = require('foo/package.json').version
} catch (er) {
foo = null
}
if ( notGoodFooVersion(fooVersion) ) {
foo = null
}
// .. then later in your program ..
if (foo) {
foo.doFooThings()
}
```
optionalDependencies 中的配置会覆盖dependencies中的配置最好只在一个地方写。
## engines
你可以指定项目运行的node版本范围如下
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
和dependencies一样如果你不指定版本范围或者指定为*任何版本的node都可以。
也可以指定一些npm版本可以正确的安装你的模块例如
{ "engines" : { "npm" : "~1.0.20" } }
要注意的是除非你设置了engine-strict属性engines属性是仅供参考的。
## engineStrict
注意这个属性已经弃用将在npm 3.0.0 版本干掉。
## os
可以指定你的模块只能在哪个操作系统上跑:
"os" : [ "darwin", "linux" ]
也可以指定黑名单而不是白名单:
"os" : [ "!win32" ]
服务的操作系统是由process.platform来判断的这个属性允许黑白名单同时存在虽然没啥必要这样搞...
## cpu
限制模块只能在某某cpu架构下运行
"cpu" : [ "x64", "ia32" ]
同样可以设置黑名单:
"cpu" : [ "!arm", "!mips" ]
cpu架构通过 process.arch 判断
## preferGlobal
如果您的软件包主要用于安装到全局的命令行应用程序那么该值设置为true ,如果它被安装在本地,则提供一个警告。实际上该配置并没有阻止用户把模块安装到本地,只是防止该模块被错误的使用引起一些问题。
## private
如果这个属性被设置为truenpm将拒绝发布它这是为了防止一个私有模块被无意间发布出去。如果你只想让模块被发布到一个特定的npm仓库如一个内部的仓库可与在下面的publishConfig中配置仓库参数。
## publishConfig
这个配置是会在模块发布时用到的一些值的集合。如果你不想模块被默认被标记为最新的或者默认发布到公共仓库可以在这里配置tag或仓库地址。
## DEFAULT VALUES
npm设置了一些默认参数
"scripts": {"start": "node server.js"}
如果模块根目录下有一个server.js文件那么npm start会默认运行这个文件。
"scripts":{"preinstall": "node-gyp rebuild"}
如果模块根目录下有binding.gyp, npm将默认用node-gyp来编译preinstall的脚本
"contributors": [...]
若模块根目录下有AUTHORS 文件则npm会按Name (url)格式解析每一行的数据添加到contributors中可以用#添加行注释
## 参考文档列表(https://docs.npmjs.com/)
semver(7)
npm-init(1)
npm-version(1)
npm-config(1)
npm-config(7)
npm-help(1)
npm-faq(7)
npm-install(1)
npm-publish(1)
npm-rm(1)

View File

@ -56,6 +56,8 @@ export default {
<style lang="stylus">
@require '../styles/wrapper.styl'
@require '../styles/variable.styl'
.page
padding-bottom 2rem
display block

View File

@ -44,6 +44,8 @@ export default {
</script>
<style lang='stylus'>
@require '../styles/variable.styl'
.right-menu-wrapper
width $rightMenuWidth
float right

View File

@ -1,4 +1,4 @@
{$contentClass}
body {$contentClass}
code
color var(--textLightenColor)
padding 0.25rem 0.5rem
@ -13,7 +13,7 @@
&.inserted
color $accentColor
{$contentClass}
body {$contentClass}
pre, pre[class*="language-"]
line-height 1.4
padding 1.25rem 1.5rem
@ -79,7 +79,8 @@ div[class*="language-"]
top 0
width $lineNumbersWrapperWidth
text-align center
color rgba(255, 255, 255, 0.3)
// color rgba(255, 255, 255, 0.3)
color rgba(127, 127, 127, .5)
padding 1.25rem 0
line-height 1.4
br
@ -98,8 +99,10 @@ div[class*="language-"]
width $lineNumbersWrapperWidth
height 100%
border-radius 6px 0 0 6px
border-right 1px solid rgba(0, 0, 0, 66%)
background-color $codeBgColor
// border-right 1px solid rgba(0, 0, 0, 66%)
// background-color $codeBgColor
border-right 1px solid var(--borderColor)
background-color var(--codeBgColor)
for lang in $codeLang

View File

@ -5,6 +5,8 @@
@require './wrapper'
@require './toc'
@require './theme-mode'
@require './variable'
//
@import '//at.alicdn.com/t/font_1678482_d9xae556ure.css'

View File

@ -0,0 +1,4 @@
// vdoing
$rightMenuWidth = 280px //