Programing

노드 모듈 이름에 @ 기호 사용

lottogame 2020. 10. 20. 07:13
반응형

노드 모듈 이름에 @ 기호 사용


동료가 작성한 일부 코드를보고 있는데 그녀 @는 require 문 에서 기호를 사용하고 있습니다. 다음 파일 중 하나의 첫 번째 줄입니다.

var restServer = require('@company/config')

이 코드를 실행하려고하면 오류가 발생합니다.

Error: Cannot find module '@company/config'

내가 솔직히 기대하는 것은 내 디렉토리에 다음과 같이 보이는 것이 필요하지 않습니다. 내가 싫어하는 마술이 여기에서 일어나는 것 같습니다.

내가 추측 할 수있는 것은 이것이 내가 노출되지 않은 모호한 npm 또는 Node 트릭이거나, 내가 얻지 못한 다른 어두운 구성 기술이 있다는 것입니다. @require와 함께 작동 하는 방법에 대한 설명 일지라도 모든 정보를 감사 합니다.

기타 아이디어 : Chef가이 모든 일에 관여하므로 관련성이있을 수 있습니다.

업데이트 : 99 % npm config는 이것이 현 시점에서 작동 하는 방식에 문제가 있다고 확신하지만, 어떻게 고치는 지 확실하지 않습니다.

내가 발견 한 몇 가지 사항을 기반으로하는 Update2 :

Dereks-MacBook-Pro:project-dir derekjanni$ npm config set //registry.npmjs.org/:authtoken $SECRET_TOKEN

Dereks-MacBook-Pro:project-dir derekjanni$ npm install
npm ERR! Darwin 15.0.0
npm ERR! argv "/usr/local/Cellar/node/5.5.0/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v5.5.0
npm ERR! npm  v3.5.3
npm ERR! code E404
npm ERR! 404 Not found : @company/config
npm ERR! 404  '@company/config' is not in the npm registry.

npm의 범위가 지정된 패키지 앞에는 '@'기호가 있습니다. https://docs.npmjs.com/misc/scope

문서에는 범위 지정 패키지 요구에 대한 추가 정보가 포함되어 있습니다. https://docs.npmjs.com/misc/scope#requiring-scoped-packages

범위가 지정된 패키지 필요

범위가 지정된 패키지는 범위 폴더에 설치되기 때문에 코드에 범위 이름이 필요할 때 범위 이름을 포함해야합니다 (예 :

require('@myorg/mypackage')

Node가 범위 폴더를 처리하는 방식에 특별한 것은 없습니다. 이것은 @myorg라는 폴더에 mypackage 모듈을 요구하도록 지정하는 것입니다.


그래서이 문제를 직접 해결했습니다.

알고 보니 것은 @company/config우리의 개인 NPM 저장소, NPM에서 호스팅 및 내부 GitHub의 저장소에이 별칭에 의해 정의 중 하나입니다 : 그것은 방법과는 아무 상관이 없었다 require작품.

사용 @하는 것은 개인 NPM 저장소에 대해 알지 못했던 프로토콜 일 수도 있고 아닐 수도 있습니다.이 문제가 발생하면 염두에 두십시오.


범위가 지정된 패키지와 별도로 npm의 모듈 별칭 패키지 로 인해 '@'가 발생할 수 있습니다 . 모듈 앨리어싱을 통해 전체 경로없이 자주 사용하는 모듈을 사용할 수 있습니다. 또한 디렉토리 구조가 길 때 효과적입니다. 예)require('../../../../some/very/deep/module')

대신 다음을 사용할 수 있습니다. var module = require('@deep/module')

package.json에서 별칭을 제공하는 모듈을 제공 할 수 있습니다.

"_moduleAliases": {
  "@root"      : ".", // Application's root
  "@deep"      : "src/some/very/deep/directory/or/file",
  "@my_module" : "lib/some-file.js",
  "something"  : "src/foo", // Or without @. Actually, it could be any string
}

그리고 앱의 기본 파일에서 다음을 사용하십시오.

require('module-alias/register');

자세한 정보는 여기를 참조하십시오 : module-alias


@범위는 패키지 소유권을 나타냅니다

지금까지 본 범위의 주요 이점은 각 범위가 GitHub 사용자 이름 / 조직 이름과 같이 조직 / 사용자의 npm 계정에 의해 제어된다는 것입니다.

이렇게하면보고있는 패키지가 신뢰할 수있는 조직에 속하는지 또는 타사 도구인지 쉽게 확인할 수 있습니다.

예를 들어 다음이 표시되는 경우 :

@angular/cli

그런 다음 Angular 팀에서 제공하고 신뢰할 수 있음을 알고 있습니다.

반면에 다음과 같은 내용은 말할 수 없습니다.

angular-cli

참고 항목 : npm 패키지에서 "at"(@) 접두사의 의미는 무엇입니까?


전화 require()하면 경로를 읽습니다. 당신은 같은 폴더 이름을 지정하면 아무 문제 없을 것 같다 있기 때문에 @company, 당신은 뭔가를 필요로 할 수 있어야한다 @.

Your coworker may have wanted to keep @company/config.js for herself because configurations usually are personal and could not be the same for another user.

require will call files inside your project folder, with a detail:

  • If you call files inside your project folders you must add ./ in front of your route.
  • If you call any global package such as http or any npm modules (which are installed at node_modules), you can omit the ./.

I created a route @company/config inside my test project folder. It only allowed me to require it using ./@company/config. Only when i moved the folder inside node_modules, it allowed me to require('@company/config');.

I wouldn't recommend to put any module inside node_modules, it's just a 'container' for npm packages. Try to create a new config file and change the require route or simply delete the require and create a config object in your main file.

참고URL : https://stackoverflow.com/questions/36293481/use-of-symbol-in-node-module-names

반응형