精华内容
下载资源
问答
  • 年package
    千次阅读
    2021-02-22 01:24:43

    作用:根据提供的目标浏览器的环境来,智能添加css前缀,js的polyfill垫片,来兼容旧版本浏览器。避免不必要的兼容代码,以提高代码的编译质量。

    共享使用browserslist的组件们:

    组件名功能
    Autoprefixerpostcss添加css前缀组件
    bable-preset-env编译预设环境 智能添加polyfill垫片代码
    postcss-normalize

    基础语法: 只要package.json配置了browserslist对象,需要的组件将自动匹配到并使用,也可以配置到具体的组件参数

    {//package.json
    	"browserslist": [ //注意:这是一个数组对象
      	 	"> 1%",
      	 	//last 2 versions:CanIUse.com追踪的IE最新版本为11,向后兼容两个版本即为10、11
       		"last 2 versions",
       		"not dead"
     	]
    }
    

    设置语法:通过浏览器过滤的思路实现
    默认是兼容所有最新版本

    例子说明
    > 1%全球超过1%人使用的浏览器
    > 5% in US指定国家使用率覆盖
    last 2 versions所有浏览器兼容到最后两个版本根据CanIUse.com追踪的版本
    Firefox ESR火狐最新版本
    Firefox > 20指定浏览器的版本范围
    not ie <=8方向排除部分版本
    Firefox 12.1指定浏览器的兼容到指定版本
    unreleased versions所有浏览器的beta测试版本
    unreleased Chrome versions指定浏览器的测试版本
    since 20132013年之后发布的所有版本
    更多相关内容
  • 新建package自动化工具

    2020-11-22 20:53:53
    另外,在202011月22日20:50:00之前下载过的筒子请注意,none path 不等于 本路径目录,请额外注意!! 另外在告知一个情况,CSDN如果上传以后就不能自行删除,如果有想上传的资源的人请自行考虑清楚再上传。
  • NPM 用户 COLEWW 在 2016 左右向 NPM 发布了一个名为的包。 该项目已在以只读方式存档。 我在这个包中使用了一些 COLEWW 的代码(尤其是他使用yargs包的例子)。 安装 在本地安装edit-package-json : npm ...
  • Magica Cloth.unitypackage

    2021-10-14 18:51:57
    202110月10日更新 https://assetstore.unity.com/packages/tools/physics/magica-cloth-160144#content
  • 经验模态分解(Empirical Mode Decomposition,EMD)法是黄锷(N.... Huang)在美国国家宇航局与其他人于1998创造性地提出的一种新型自适应信号时频处理方法,特别适用于非线性非平稳信号的分析处理。
  • 我们将在2020底之前发布frictionless@4.x无障碍@ 4.x,成为第一个SemVer / stable版本 特征 用于处理数据包的Package类 用于处理数据资源的Resource类 用于使用配置文件的配置Profile类 用于验证数据包描述符的...
  • 文件大小:1.1 MB 最新版本:2.5.2 最新发布日期:202010月21日 支持Unity版本:2017.4.40或更高 优化最终的构建大小并保持项目简洁
  • 包只能访问在package.json中指定的依赖项。 确定性的。 有一个名为pnpm-lock.yaml文件。 随处可用。 支持Windows,Linux和macOS。 经过战斗测试。 自2016以来,的团队用于生产。 引用团队: 微软每天在Rush...
  • HP-Probook-EliteBook-Package-Creator 这是为了测试macOS 在测试macOS之后购买Mac 没有日志或所有相关信息的任何问题都将被删除。 这在VM上不起作用 对于macOS 11 Big Sur➣HP 这个项目建于20185月19日,因为...
  • empty_package 20213月12日 Flutter包项目的模板。 入门
  • 最新发布日期:20218月12日 支持Unity版本:5.5.1或更高 提高性能!结合网格和材料以减少批量! Mesh Baker 是一个强大的工具包,具有灵活的非破坏性工作流程,用于优化道具和场景。 Unity 最著名的优化工具。自 ...
  • 文件大小 23.1 MB 最新版本 2.26 最新发布日期 202010月14日 支持Unity版本 2020.1.4或更高
  • 最新发布日期:20209月28日 支持Unity版本:2017.4.26或更高 UGUI Super ScrollView gives easily-customizable ScrollView, based on UGUI ScrollRect. It is a set of C# scripts to help you create ...
  • 2019最新版本的Bluetooth LE for iOS tvOS and Android.unitypackage2.25。现在市面上都有BUG,只有我这个可以直接用哦!!!
  • 最新发布日期:20217月30日 支持Unity版本:2018.4.32或更高 这是目前 Unity 可用的最完善的本地化系统。 支持 Unity UI、Unity 2D、TextMesh Pro、NGUI、2D ToolKit、SVG Importer、标准组件 (Standard ...
  • Unity Particle 5.X Pack Unity3d推出重磅粒子特效
  • 包级元数据标准这是与ESS-DIVE的程序包级别元数据标准关联的自述文件。...目录规格:范本:贡献准则:关于包级元数据标准在这里,我们可以写一个简短的摘要来描述标准的制定。... 。 标准的全名,版本号。 DOI:
  • 2020Unity最新弓箭射击怪物全流程可执行调试场景,冰属性剑、火属性剑、雷属性剑、木属性剑、水属性剑等等五行剑攻击特效unitypackage完整包
  • CRAN 尚未提供此软件包(截至 2015 2 月 21 日)。 要直接从 GitHub 安装最新的开发版本,请运行以下命令: if ( ! require( " devtools " )) install.packages( " devtools " ) devtools :: install_github( ...
  • Bolt1.2.3.unitypackage

    2018-03-31 17:22:52
    Bolt1.2.3,2018最新的版本,可以完美运行在5.x版本和2017版本上面
  • unity的插件,在手机上内嵌显示网页,2022最新版本。
  • 最新发布日期:20218月15日 支持Unity版本:2018.4.31或更高 Easy Save makes saving and loading data simple by combining a serializer and storage into one neat package. Serialize just about anything ...
  • ********* v5.0.0(20198月2日)********* - 在入站和出站的变化中,增强逻辑显示按钮显示按钮 ********* v4.0.0(20193月29日)********* - 修复了按钮消失的间歇性问题 - 修复了在入站变更上出现的按钮的问题...
  • 20175月 Shader+Forge+1.36.unitypackage,需要的下载吧!
  • v2.1.12(20204月27日发布)本人日常使用的版本,支持Unity5.3.0或更高 Odin Inspector是Unity的一个插件,让您可以享受拥有强大,自定义和用户友好编辑器的所有工作流程优势,而无需编写任何自定义编辑器代码。 ...
  • 经常在oracle中写plsql的应该都知道,oracle中使用package不仅仅是把多个函数或者过程整合到一起,它还具有一些其他的优点,比如 1. 可以定义私有化函数、过程、type、type数组、变量等,让其只能被包内的函数调用 2. ...

    一、前言

    经常在oracle中写plsql的应该都知道,oracle中使用package不仅仅是把多个函数或者过程整合到一起,它还具有一些其他的优点,比如

    1. 可以定义私有化函数、过程、type、type数组、变量等,让其只能被包内的函数调用
    2. 可以在不同的package内使用同名的函数、过程、type、type数组、变量等
    3. 在调试代码时,不需要跳转很多对象
    4. 把package的ddl文本中的包名进行修改,即可创建一个内部代码完全相同但名字不同的包,无需去修改内部其他函数或过程的名称,方便进行测试

    实际优点远远不止上面提到的这些。

    二、PostgreSQL的"package"

    PostgreSQL是不支持创建package的,更别提调用package中的过程及函数了。

    目前信创环境下,有大量的oracle数据库被要求迁移到开源或国产数据库,但其中的package迁移变成了一个很让人头疼的事,要么重新开发对应的plsql代码,要么就要让目标数据库支持使用package。

    常见的在oracle中调用package中过程的语法为

    begin
    pck.pro;
    end;
    

    上例中,pck为包名,pro为过程名,或者也可以被识别为schema_name.procedure_name,oracle会自动识别前面的是包名还是schema_name。但是这个语法如果放到PostgreSQL中,就只能是后者了,即pck这个schema下的pro过程,这个时候过程就不在package里了。

    因此,有人想到了一种方法,直接用包名建一个schema,然后在这个schema下来创建原有包内的过程及函数。至于会话内的参数暂存及传递,使用会话级临时表进行处理。
    这样就可以变相地支持package的调用语法了。

    但是,这个方法的缺点也显而易见

    1. 创建一个"package"就得创建一个schema,大型业务系统迁入进来恐怕得有几十上百个schema了,难以管理
    2. 这些过程及函数相当于是全部独立的,无论是在解析还是在参数的处理上,性能都不如单独的一个package
    3. 创建一个"package"也变得困难,需要逐个过程或逐个函数去创建

    三、openGauss的"package"

    在2021年9月份,openGauss发布了2.1.0版本(Preview),并在2021年12月份宣布支持"create or replace package"。

    众所周知,openGauss是基于PostgreSQL开源项目进行的研发,那它是如何实现支持package的呢?

    首先,新建openGauss数据库时,必须要指定兼容A(参考【openGauss】构建一个兼容Oracle模式支持创建package的openGauss的docker镜像),然后在数据库里就可以按照类似oracle语法那样来创建包了,比如

    CREATE OR REPLACE package dbms_lock
    as
      PROCEDURE sleep(pi_seconds double precision);
    end dbms_lock;
    /
    CREATE OR REPLACE package body dbms_lock
    as
      PROCEDURE sleep(pi_seconds double precision)
      AS
      BEGIN
        perform pg_sleep(pi_seconds);
      END;
    end dbms_lock;
    /
    

    还可以像在oracle中一样调用

    begin
    dbms_lock.sleep(1);
    end;
    

    不过要注意的是,在创建包说明和包体的最后,必须要接上包名(ORACLE可接可不接,但是如果接了必须保持和开头的包名一致);还有PostgreSQL(openGauss)在不指定schema时创建的过程及函数,是默认创建在pg_catalog这个schema下的,同理package也是如此。

    到这里,我突然产生了一个疑问,在pg_proc能不能找到这个包呢?

    select * from pg_proc x where LOWER(x.proname) like '%dbms_lock%';
    

    结果是没有记录???
    然后我去查看所有schema,的确也没有"dbms_lock"这个schema,那这个对象跑哪去了?

    再查

    select * from pg_proc x where LOWER(x.proname) like '%sleep%';
    

    image.png
    通过drop再create,确认第二个行记录的确就是通过创建包来生成的一个过程,然后可以发现它的propackage和propackageid这两个字段和其他过程是有区别的。我猜测propackageid表示这个过程对应的包id,如果一个包里有多个过程,那么它们的propackageid应该是一样的,实测也证实的确如此。
    image.png

    可是包名到哪去了?直觉告诉我,应该还有个视图或者表有记录包的信息,于是查

    select * from pg_class where relname like '%package%'
    

    image.png
    再查第一个表
    image.png
    果然id是对应的,都是16387

    但问题又来了,在PostgreSQL中,pg_proc里的过程及函数,对于一个schema下同名且同参数的,是禁止同时存在多个的,具有唯一性,openGauss这个实现方式难道越过了这个限制么?

    答案是,没有。

    我翻了openGauss的官方文档
    https://opengauss.org/zh/docs/2.1.0/docs/Developerguide/CREATE-PACKAGE.html
    image.png

    1. 由于升级的限制,在V5R2C00版本中,即使在不同的Package间,也无法创建同名同参的存储过程。
    2. package只支持集中式,无法在分布式中使用。
    3. 在package specification中声明过的函数或者存储过程,必须在package body中找到定义。
    4. 在实例化中,无法调用带有commit/rollback的存储过程。
    5. 不能在Trigger中调用package函数。
    6. 不能在外部SQL中直接使用package当中的变量。
    7. 不允许在package外部调用package的私有变量和存储过程。
    8. 不支持其它存储过程不支持的用法,例如,在function中不允许调用commit/rollback,则package的function中同样无法调用commit/rollback。
    9. 不支持schema与package同名。
    10. 只支持A风格的存储过程和函数定义。
    11. 不支持package内有同名变量,包括包内同名参数。
    12. package的全局变量为session级,不同session之间package的变量不共享。
    13. package中调用自治事务的函数,不允许使用公有变量,以及递归的使用公有变量的函数。
    14. package中不支持声明ref cursor类型。

    看到这一堆限制,尤其是1、5、10,这真是太可惜了。对于package来说,该有的限制是加上了,但该支持的功能却有一些不支持。

    比如说第1点,以前写个业务功能代码,建个包,里面经常会写个名字为"main"的过程,方便开发人员找到入口;如果是导出的话,对应的过程也会命名为"export_data"之类的。这些都属于企业内部约定俗成的开发规范。但openGauss有这个限制的话,就无法对原有系统实现无缝迁移了,还是得改应用代码。

    第5点这个限制有点莫名其妙,有可能是pg内核的原因。

    第6点这个有点不理解,实测在package外部是可以用package的变量的。

    CREATE OR REPLACE package dbms_lock
    as
    pi_seconds double precision DEFAULT 1;
      PROCEDURE sleep(pi_seconds double precision);
    end dbms_lock;
    /
    CREATE OR REPLACE package body dbms_lock
    as
      PROCEDURE sleep(pi_seconds double precision)
      AS
      BEGIN
        perform pg_sleep(pi_seconds);
      END;
    end dbms_lock;
    /
    
    declare
    a double precision;
    begin
    set client_min_messages='notice';
     a:=dbms_lock.pi_seconds;
     raise notice '%',a;
    end;
    
    

    第11点也不理解,实测可以在包内使用同名变量和同名参数。

    CREATE OR REPLACE package dbms_lock
    as
    pi_seconds double precision DEFAULT 1;
      PROCEDURE sleep(pi_seconds double precision);
      PROCEDURE sleep2(pi_seconds double precision);
    end dbms_lock;
    /
    CREATE OR REPLACE package body dbms_lock
    as
      PROCEDURE sleep(pi_seconds double precision)
      AS
      a int;
      BEGIN
        perform pg_sleep(pi_seconds);
      END;
      PROCEDURE sleep2(pi_seconds double precision)
      AS
      a int;
      BEGIN
        perform pg_sleep(pi_seconds);
      END;
    end dbms_lock;
    /
    

    另外,这种方式创建的包,无法和目前官方的compat_tools兼容,因为compat_tools是用新建一个包就建一个schema的方式写的,而这也违背了第9点。

    四、总结

    整体来看,增加package的支持给openGauss带来了不小的优势,可以让熟悉package开发的人员迅速上手来进行业务系统逻辑代码的研发。但是受限于pg的内核,目前看上去openGauss只是在sql解析阶段来兼容了package的创建及使用语法,在后台仍旧是转换成一个个单独的过程来执行,并没有创造一种新的对象,由此带来了官方文档中那一系列限制,这是在未来开发使用中需要注意的。

    展开全文
  • 本文主要从最近的实践出发,结合最新的npm和node的版本,介绍一下package.json中一些常见的配置以及如何写一个规范的package.json package.json package.json常用属性 package.json环境相关属性 package.json依赖...

    大家好,我是若川。持续组织了8个月源码共读活动,感兴趣的可以 点此加我微信ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。


    本文经作者@yuxiaoliang 授权转载
    原文链接:https://juejin.cn/post/7099041402771734559


    npm是前端开发人员广泛使用的包管理工具,项目中通过package.json来管理项目中所依赖的npm包的配置。package.json就是一个json文件,除了能够描述项目的包依赖外,允许我们使用“语义化版本规则”指明你项目依赖包的版本,让你的构建更好地与其他开发者分享,便于重复使用。
    本文主要从最近的实践出发,结合最新的npm和node的版本,介绍一下package.json中一些常见的配置以及如何写一个规范的package.json

    • package.json

    • package.json常用属性

    • package.json环境相关属性

    • package.json依赖相关属性

    • package.json三方属性


    1package.json

    1. package.json简介

    在nodejs项目中,package.json是管理其依赖的配置文件,通常我们在初始化一个nodejs项目的时候会通过:

    npm init

    然后在你的目录下会生成3个目录/文件, node_modules, package.json和 package.lock.json。其中package.json的内容为:

    {
        "name": "Your project name",
        "version": "1.0.0",
        "description": "Your project description",
        "main": "app.js",
        "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1",
        },
        "author": "Author name",
        "license": "ISC",
        "dependencies": {
            "dependency1": "^1.4.0",
            "dependency2": "^1.5.2"
        }
    }

    上述可以看出,package.json中包含了项目本身的元数据,以及项目的子依赖信息(比如dependicies等)。

    2. package-lock.json

    我们发现在npm init的时候,不仅生成了package.json文件,还生成了package-lock.json文件。那么为什么存在package.json的清空下,还需要生成package-lock.json文件呢。本质上package-lock.json文件是为了锁版本,在package.json中指定的子npm包比如:react: "^16.0.0",在实际安装中,只要高于react的版本都满足package.json的要求。这样就使得根据同一个package.json文件,两次安装的子依赖版本不能保证一致。
    而package-lock文件如下所示,子依赖dependency1就详细的指定了其版本。起到lock版本的作用。

    {
        "name": "Your project name",
        "version": "1.0.0",
        "lockfileVersion": 1,
        "requires": true,
        "dependencies": {
            "dependency1": {
                "version": "1.4.0",
                "resolved": 
    "https://registry.npmjs.org/dependency1/-/dependency1-1.4.0.tgz",
                "integrity": 
    "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
            },
            "dependency2": {
                "version": "1.5.2",
                "resolved": 
    "https://registry.npmjs.org/dependency2/-/dependency2-1.5.2.tgz",
                "integrity": 
    "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ=="
            }
        }
    }

    2package.json常用属性

    本章来聊聊package.json中常用的配置属性,形如name,version等属性太过简单,不一一介绍。本章主要介绍一下script、bin和workspaces属性。

    2.1 script

    在npm中使用script标签来定义脚本,每当制定npm run的时候,就会自动创建一个shell脚本,这里需要注意的是,npm run新建的这个 Shell,会将本地目录的node_modules/.bin子目录加入PATH变量。
    这意味着,当前目录的node_modules/.bin子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。比如,当前项目的依赖里面有 esbuild,只要直接写esbuild xxx 就可以了。

    {
      // ...
      "scripts": {
        "build": "esbuild index.js",
      }
    }
    {
      // ...
      "scripts": {
        "build": "./node_modules/.bin/esbuild index.js" 
      }
    }

    上面两种写法是等价的。

    2.2 bin

    bin属性用来将可执行文件加载到全局环境中,指定了bin字段的npm包,一旦在全局安装,就会被加载到全局环境中,可以通过别名来执行该文件。

    比如\@bytepack/cli的npm包:
    "bin": {
        "bytepack": "./bin/index.js"
     },

    一旦在全局安装了@bytepack/cli,就可以直接通过bytepack来执行相应的命令,比如

    bytepack -v
    //显示1.11.0

    如果非全局安装,那么会自动连接到项目的node_module/.bin目录中。与前面介绍的script标签中所说的一致,可以直接用别名来使用。

    2.3 workspaces

    在项目过大的时候,最近越来越流行monorepo。提到monorepo就绕不看workspaces,早期我们会用yarn workspaces,现在npm官方也支持了workspaces.     workspaces解决了本地文件系统中如何在一个顶层root package下管理多个子packages的问题,在workspaces声明目录下的package会软链到最上层root package的node_modules中。
    直接以官网的例子来说明:

    {
      "name": "my-project",
      "workspaces": [
        "packages/a"
      ]
    }

    在一个npm包名为my-project的npm包中,存在workspaces配置的目录。

    .
    +-- package.json
    +-- index.js
    `-- packages
       +-- a
       |  `-- package.json

    并且该最上层的名为my-project的root包,有packages/a子包。此时,我们如果npm install,那么在root package中node_modules中安装的npm包a,指向的是本地的package/a.

    .
    +-- node_modules
    |  `-- packages/a -> ../packages/a
    +-- package-lock.json
    +-- package.json
    `-- packages
       +-- a
       |   `-- package.json

    上述的

    -- packages/a -> ../packages/a

    指的就是从node_modules中a链接到本地npm包的软链

    3package.json环境相关属性

    常见的环境,基本上分为浏览器browser和node环境两大类,接下来我们来看看package.json中,跟环境相关的配置属性。环境的定义可以简单理解如下:

    • browser环境:比如存在一些只有在浏览器中才会存在的全局变量等,比如window,Document等

    • node环境: npm包的源文件中存在只有在node环境中才会有的一些变量和内置包,内置函数等。

    3.1 type

    js的模块化规范包含了commonjs、CMD、UMD、AMD和ES module等,最早先在node中支持的仅仅是commonjs字段,但是从node13.2.0开始后,node正式支持了ES module规范,在package.json中可以通过type字段来声明npm包遵循的模块化规范。

    //package.json
    {
       name: "some package",
       type: "module"||"commonjs" 
    }

    需要注意的是:

    • 不指定type的时候,type的默认值是commonjs,不过建议npm包都指定一下type

    • 当type字段指定值为module则采用ESModule规范

    • 当type字段指定时,目录下的所有.js后缀结尾的文件,都遵循type所指定的模块化规范

    • 除了type可以指定模块化规范外,通过文件的后缀来指定文件所遵循的模块化规范,以.mjs结尾的文件就是使用的ESModule规范,以.cjs结尾的遵循的是commonjs规范

    3.2 main & module & browser

    除了type外,package.json中还有main,module和browser 3个字段来定义npm包的入口文件。

    • main : 定义了 npm 包的入口文件,browser 环境和 node 环境均可使用

    • module : 定义 npm 包的 ESM 规范的入口文件,browser 环境和 node - 环境均可使用

    • browser : 定义 npm 包在 browser 环境下的入口文件

    我们来看一下这3个字段的使用场景,以及同时存在这3个字段时的优先级。我们假设有一个npm包为demo1,

    ----- dist
       |-- index.browser.js
       |-- index.browser.mjs
       |-- index.js
       |-- index.mjs

    其package.json中同时指定了main,module和browser这3个字段,

    "main": "dist/index.js",  // main 
      "module": "dist/index.mjs", // module
    
      // browser 可定义成和 main/module 字段一一对应的映射对象,也可以直接定义为字符串
      "browser": {
        "./dist/index.js": "./dist/index.browser.js", // browser+cjs
        "./dist/index.mjs": "./dist/index.browser.mjs"  // browser+mjs
      },
    
      // "browser": "./dist/index.browser.js" // browser

    默认构建和使用,比如我们在项目中引用这个npm包:

    import demo from 'demo'

    通过构建工具构建上述代码后,模块的加载循序为:_browser+mjs > module > browser+cjs > main_这个加载顺序是大部分构建工具默认的加载顺序,比如webapck、esbuild等等。可以通过相应的配置修改这个加载顺序,不过大部分场景,我们还是会遵循默认的加载顺序。

    3.3 exports

    如果在package.json中定义了exports字段,那么这个字段所定义的内容就是该npm包的真实和全部的导出,优先级会高于main和file等字段。举例来说:

    {
      "name": "pkg",
      "exports": {
        ".": "./main.mjs",
        "./foo": "./foo.js"
      }
    }
    import { something } from "pkg"; // from "pkg/main.mjs"
    const { something } = require("pkg/foo"); // require("pkg/foo.js")

    从上述的例子来看,exports可以定义不同path的导出。如果存在exports后,以前正常生效的file目录到处会失效,比如require('pkg/package.json'),因为在exports中没有指定,就会报错。    exports还有一个最大的特点,就是条件引用,比如我们可以根据不同的引用方式或者模块化类型,来指定npm包引用不同的入口文件。

    // package.json
    { 
      "name":"pkg",
      "main": "./main-require.cjs",
      "exports": {
        "import": "./main-module.js",
        "require": "./main-require.cjs"
      },
      "type": "module"
    }

    上述的例子中,如果我们通过

    const p = require('pkg')

    引用的就是"./main-require.cjs"。如果通过:

    import p from 'pkg'

    引用的就是"./main-module.js"最后需要注意的是 :如果存在exports属性,exports属性不仅优先级高于main,同时也高于module和browser字段。

    4package.json依赖相关属性

    package.json中跟依赖相关的配置属性包含了dependencies、devDependencies、peerDependencies和peerDependenciesMeta等。

    dependencies是项目的依赖,而devDependencies是开发所需要的模块,所以我们可以在开发过程中需要的安装上去,来提高我们的开发效率。这里需要注意的时,在自己的项目中尽量的规范使用,形如webpack、babel等是开发依赖,而不是项目本身的依赖,不要放在dependencies中。

    dependencies除了dependencies和devDependencies,本文重点介绍的是peerDependencies和peerDependenciesMeta。

    3.1 peerDependencies

    peerDependencies是package.json中的依赖项,可以解决核心库被下载多次,以及统一核心库版本的问题。

    //package/pkg
    ----- node_modules
       |-- npm-a -> 依赖了react,react-dom
       |-- npm-b -> 依赖了react,react-dom
       |-- index.js

    比如上述的例子中如果子npm包a,b都以来了react和react-dom,此时如果我们在子npm包a,b的package.json中声明了PeerDependicies后,相应的依赖就不会重新安装。需要注意的有两点:

    • 对于子npm包a,在npm7中,如果单独安装子npm a,其peerDependicies中的包,会被安装下来。但是npm7之前是不会的。

    • 请规范和详细的指定PeerDependicies的配置,笔者在看到有些react组件库,不在PeerDependicies中指定react和react-dom,或者将react和react-dom放到了dependicies中,这两种不规范的指定都会存在一些问题。

    • 其二,正确的指定PeerDependicies中npm包的版本,react-focus-lock\@2.8.1[1],peerDependicies指定的是:"react": "^16.8.0 || ^17.0.0 || ^18.0.0",但实际上,这个react-focus-lock并不支持18.x的react

    3.2 peerDependenciesMeta

    看到“Meta”就有元数据的意思,这里的peerDependenciesMeta就是详细修饰了peerDependicies,比如在react-redux这个npm包中的package.json中有这么一段:

    "peerDependencies": {
        "react": "^16.8.3 || ^17 || ^18"
      },
     "peerDependenciesMeta": {
        "react-dom": {
          "optional": true
        },
        "react-native": {
          "optional": true
        }
      }

    这里指定了"react-dom","react-native"在peerDependenciesMeta中,且为可选项,因此如果项目中检测没有安装"react-dom"和"react-native"都不会报错。

    值得注意的是,通过peerDependenciesMeta我们确实是取消了限制,但是这里经常存在非A即B的场景,比如上述例子中,我们需要的是“react-dom”和"react-native"需要安装一个,但是实际上通过上述的声明,我们实现不了这种提示。

    5package.json三方属性

    package.json中也存在很多三方属性,比如tsc中使用的types、构建工具中使用的sideEffects,git中使用的husky,eslint使用的eslintIgnore,这些扩展的配置,针对特定的开发工具是有意义的这里不一一举例。

    参考资料

    [1]

    mailto:react-focus-lock@2.8.1: https://link.juejin.cn?target=mailto%3Areact-focus-lock%402.8.1

    cee5082d2e0d6735f39eee9f766217b9.gif

    ················· 若川简介 ·················

    你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
    从2014年起,每年都会写一篇年度总结,已经坚持写了8年,点击查看年度总结
    同时,最近组织了源码共读活动,帮助4000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

    24f6d5ff0e2661e9de1f9b1e19f18497.png

    扫码加我微信 ruochuan02、拉你进源码共读

    今日话题

    目前建有江西|湖南|湖北 籍 前端群,想进群的可以加我微信 ruochuan12 进群。分享、收藏、点赞、在看我的文章就是对我最大的支持~

    展开全文
  • 2015 4 月 9 日。蒙特利尔。 大卫·比兹利 (@dabeaz), ://www.dabeaz.com 本教程假设使用 Python 3.4 或更新版本。 第 8 节和第 9 节中的某些示例需要使用 Python 3.5。 本教程的官方网站是 第 1 部分 - ...
  • Unity3d插件,2021最新版,快速轻巧的序列化器,用于快速保存、加密本地数据 ,比PlayerPrefs更强大。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 262,181
精华内容 104,872
热门标签
关键字:

年package