Open xccjk opened 1 year ago
很多情况下,公司内部会有不同的npm源,或者为了国内安装速度问题,选择淘宝源等... 当想发布npm包时,而源不为npm源时,在npm adduser或者npm login时会报错。
解决方案:将源切换到npm源上
npm config set registry https://registry.npmjs.org
安装nrm可以查看自己当前是在使用哪个源
npm install nrm -g
// 查看所有源与当前源
nrm ls
公司内容搭建了自己的npm仓库,下载内部npm包时,必须通过内部的npm源来安装依赖,否则安装不成功。当个人要发布npm包时,经常需要来回切换npm源,比较麻烦,特此记录一下操作过程
本质还是安装的npm上的包,依赖包的仓库不会变,所以安装下来的包没有什么区别
yarn.lock
文件来记录安装版本JS包管理平台,但是安装速度不够快,拉取的package包版本可能不一致,同时npm允许安装package时执行代码,存在安全隐患
npm: https://registry.npmjs.org/
cnpm: https://r.cnpmjs.org/
taobao: https://registry.npm.taobao.org/
nj: https://registry.nodejitsu.com/
rednpm: https://registry.mirror.cqupt.edu.cn/
npmMirror: https://skimdb.npmjs.com/registry/
deunpm: http://registry.enpmjs.org/
在命令行工具输入npm config edit
即可对本机镜像进行查看编辑
npm config edit
假设修改为淘宝镜像
// 查看npm当前镜像源
npm config get registry
// 设置npm镜像源为淘宝镜像
npm config set registry https://registry.npm.taobao.org/
// 查看yarn当前镜像源
config get registry
// 设置yarn镜像源为淘宝镜像
yarn config set registry https://registry.npm.taobao.org/
npm install nrm -g
nrm ls
nrm use yarn
nrm add yarn https://registry.yarnpkg.com/
nrm del yarn
nrm test yarn
在很多时候,我们在本地写一个npm模块时,经常会遇到的一个问题:
新开发或者修改的npm模块,怎么在本地测试?
为了方便描述,比如我们要在webpack-xcc
这个项目中使用一个npm包npm-link-test
很多人在遇到这个问题时,常见的做法有下面几种:
cd app/webpack-xcc
npm install app/npm-link-test
cd app/webpack-xcc/node_modules
ln -s app/npm-link-test npm-link-test
npm link
npm link
是一种把包链接到包文件夹的方式,简单来说,就是可以让你在不发布npm模块的情况下,调试该模块,并且修改模块后会实时生效,不需要通过npm install
进行安装
相关文档:https://docs.npmjs.com/cli/v6/commands/npm-link
npm link
npm link name
npm-link-test
包修改npm-link-test下的index.js内容,会发现项目目录的文件也一起发生变化
在调试完模块后,需要从项目中移除link进行的模块
npm unlink name
在es
模块中使用__dirname
时,会报错
The "__dirname is not defined in ES module scope" error occurs when we try to try to use the __dirname global variable in an ES module file. The __dirname or __filename global variables are not available in ECMAScript module files
解决方案:
import path from 'path';
import {fileURLToPath} from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
console.log(path.join(__dirname, 'app'))
const str = JSON.stringify(data, "", "\t");
或者
const str = JSON.stringify(data, null, "\t");
读取:
const getPackageJson = (path) => {
const packageJson = fs.readFileSync(path);
return JSON.parse(packageJson);
}
packageJson('./package.json');
写入:
const writePackageJson = ({ path, json }) => {
fs.writeFile(path, JSON.stringify(json, null, '\t'), (err) => {
if (err) console.log('package.json修改失败: ', err);
console.log('package.json修改成功!');
})
}
writePackageJson({ path: './package.json', json: packageJson('./package.json') })
fs.existsSync(path)
怎么发布一个npm包
mkdir xcc && cd xcc
npm init
xcc-standrad-eslint
,版本为0.1.0
npm adduser
Logged in as xxx on https://registry.npmjs.org/.
npm login
npm publish
即可npm unpublish xcc-standrad-eslint@0.1.0
参考文章