노드 모듈 이름에 @ 기호 사용
동료가 작성한 코드를 보고 있는데 그녀가 사용하고 있습니다.@
하십시오.다음 파일 중 하나의 첫 번째 줄입니다.
var restServer = require('@company/config')
이 코드를 실행하려고 하면 다음 오류가 발생합니다.
Error: Cannot find module '@company/config'
솔직히 제가 예상하는 바로는, 제 디렉토리에는 이런 것이 인식할 필요가 없습니다!여기서 무슨 마법이 일어나는 것 같아요. 제가 싫어요.
제가 추측할 수 있는 것은 이것이 제가 노출되지 않은 모호한 npm이나 노드 트릭이거나 아니면 제가 이해하지 못하는 다른 어두운 구성 기술이 있다는 것입니다.모든 정보는 감사합니다. 비록 그것이 단지 어떻게 설명할지라도.@
필요에 따라 작동합니다.
기타 아이디어:주방장이 이 모든 일에 연관되어 있으니 관련이 있을 수도 있습니다.
업데이트: 99%는 이것이 방법에 문제가 있다고 확신합니다.npm config
이 시점에서는 작동하지만 어떻게 해결해야 할지는 여전히 알 수 없습니다.
제가 발견한 몇 가지 사항을 기반으로 한 업데이트 2:
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/about-scopes
범위는 관련 패키지를 함께 그룹화하는 방법이며, npm이 패키지를 처리하는 방법에 대한 몇 가지 사항에도 영향을 미칩니다.각 npm 사용자/조직에는 고유한 범위가 있으며 사용자만 해당 범위에 패키지를 추가할 수 있습니다.따라서 다른 사용자가 사용자의 패키지 이름을 미리 가져갈 염려가 없습니다.따라서 조직의 공식 패키지에 신호를 보내는 좋은 방법이기도 합니다.https://docs.npmjs.com/misc/scope
이 문서에는 범위가 지정된 패키지가 필요한 경우에 대한 추가 정보가 포함되어 있습니다. https://docs.npmjs.com/misc/scope#requiring-scoped-packages
범위가 지정된 패키지 필요
범위가 지정된 패키지는 범위 폴더에 설치되므로 코드에 범위 이름을 포함해야 합니다.
require('@myorg/mypackage')
노드가 스코프 폴더를 처리하는 방식에 대해 특별한 것은 없으며, @myorg라는 폴더에 mypackage 모듈이 필요하도록 지정한 것입니다.
그@
범위는 패키지 집합에 대한 공통 패키지 소유권을 나타냅니다.
공식 문서의 출처는 https://docs.npmjs.com/about-scopes 입니다.
npm 사용자 계정에 가입하거나 조직을 만들 때 사용자 또는 조직 이름과 일치하는 범위가 부여됩니다.이 범위를 관련 패키지의 네임스페이스로 사용할 수 있습니다.
범위를 사용하면 충돌 없이 다른 사용자 또는 조직에서 만든 패키지와 동일한 이름의 패키지를 만들 수 있습니다.
제가 지금까지 본 범위의 주요 장점은 GitHub 사용자 이름/조직 이름과 마찬가지로 각 범위가 조직/사용자의 npm 계정으로 제어된다는 것입니다.
이렇게 하면 현재 보고 있는 패키지가 신뢰할 수 있는 조직에 속하는지 또는 타사 도구인지 쉽게 확인할 수 있습니다.
예를 들어 패키지가 표시되는 경우:
@angular/cli
그러면 Angular 팀을 제어하는 사용자/그룹에서 제공되며 신뢰할 수 있다는 것을 알 수 있습니다.
반면에, 다음에 대해서는 동일하게 말할 수 없습니다.
angular-cli
TODO: 웹 UI/URL 체계가 정말 이상한데, 어떻게 https://www.npmjs.com/package/ @http/cli를 해당 조직/사용자 페이지, 아마도 https://www.npmjs.com/ ~http://cli에 쉽게 연결할 수 있습니까? 페이지 소스를 검색하면 해당 URL에 대한 유일한 히트는 "관리자" 아래에 있지만 다른 공동 작업자도 포함됩니다: https://www.npmjs.com/ ~http-cli 및 https://www.npmjs.com/ ~google-botbot
참고 항목:npm 패키지의 "at"(@) 접두사의 의미는 무엇입니까?
그래서 제가 직접 해결했습니다.
알고 보니@company/config
NPM에 호스팅되고 내부 GitHub 저장소에 대한 이 별칭으로 정의되는 사설 NPM 저장소 중 하나입니다. 이는 방법과 관련이 없습니다.require
작동하다.
사용.@
개인 NPM 저장소에 대해 제가 몰랐던 프로토콜일 수도 있고 아닐 수도 있습니다. 이 문제가 발생할 경우 참고하십시오.
범위가 지정된 패키지 외에도 모듈 별칭 패키지(npm)로 인해 '@'가 발생할 수 있습니다.모듈 앨리어싱을 통해 전체 경로를 필요로 하지 않고 자주 사용하는 모듈을 사용할 수 있습니다.디렉터리 구조가 길 때도 효과적입니다. 예를 들어)require('../../../../some/very/deep/module')
대신 다음을 사용할 수 있습니다.var module = require('@deep/module')
포장되어 있습니다.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');
자세한 내용은 여기를 참조하십시오. 모듈 별칭
에 전화할 때.require()
그것은 경로를 읽습니다.폴더 이름을 다음과 같이 지정하면 문제가 없을 것 같습니다.@company
당신은 무언가를 요구할 수 있어야 합니다.@
.
당신의 동료는 아마도 계속하기를 원했을 것입니다.@company/config.js
일반적으로 구성은 개인적이고 다른 사용자에게 동일할 수 없기 때문에 자신을 위한 것입니다.
require
프로젝트 폴더 내의 파일을 다음과 같이 호출합니다.
- 에는 프젝트폴내파호출는경합추니다야가해를 추가해야 .
./
당신의 경로 앞에서. - 다과같은글로패호키경출우는하를지벌음과 같은 글로벌
http
임의의 타npm
」(「 」)에 됨)node_modules
), 를 생략할 수 있습니다../
.
는 경로를 .@company/config
내 테스트 프로젝트 폴더 안에 있습니다.그것은 단지 내가 그것을 요구할 수 있게 해주었습니다../@company/config
폴더를 안으로 이동했을 때만node_modules
할 수 있게 해주었습니다.require('@company/config');
.
는 어떤모듈안넣않것좋다습에 어떤 node_modules
그것은 단지 을 위한 '선물'일 뿐입니다.npm
한 항목을 파일에 .새 구성 파일을 만들고 필요 경로를 변경하거나 필요를 삭제하고 기본 파일에 구성 개체를 만듭니다.
언급URL : https://stackoverflow.com/questions/36293481/use-of-symbol-in-node-module-names
'sourcecode' 카테고리의 다른 글
jQuery 또는 CSS 선택기를 사용하여 일부 문자열로 시작하는 모든 ID 선택 (0) | 2023.07.27 |
---|---|
내 코드가 Windows로 컴파일되고 있는지 확인할 수 있는 매크로가 있습니까? (0) | 2023.07.27 |
MySQL에서 예약된 단어를 테이블 또는 열 이름으로 사용하여 구문 오류 발생 (0) | 2023.07.27 |
"wait_message: 응답을 수신하지 못했습니다. 10004003"? (0) | 2023.07.27 |
oracle sql에서 두 날짜 사이의 경과 시간 찾기 (0) | 2023.07.27 |