나는 이미 꽤 많은 검색을 수행했습니다. 그러나 여전히 Node.js의 package.json에있는 주요 매개 변수에 대해서는 의문이 있습니다.
- 이 분야를 채우는 것이 어떻게 도움이됩니까? 다른 방법으로 물어 보면이 필드가 나타나면 다른 스타일로 모듈을 시작할 수 있습니까?
- 기본 매개 변수에 둘 이상의 스크립트를 채울 수 있습니까? 그렇다면 두 개의 스레드로 시작됩니까? 그렇지 않은 경우 모듈에서 두 개의 스크립트를 시작하고 병렬로 실행할 수있는 방법은 무엇입니까?
나는 두 번째 질문이 매우 이상하다는 것을 알고 있습니다. OpenShift에서 Node.js 응용 프로그램을 호스팅했지만 응용 프로그램이 두 가지 주요 구성 요소로 구성되어 있기 때문입니다. 하나는 REST API이고 다른 하나는 알림 전달 서비스입니다.
알림 전달 프로세스가 REST API가 단일 스레드로 구현 된 경우 REST API를 차단할 것을 두려워합니다. 그러나 동일한 MongoDB 카트리지에 연결해야합니다. 또한 가능한 경우 두 구성 요소가 모두 동일한 기어에 제공 될 수 있다면 하나의 기어를 절약하고 싶습니다.
어떤 제안이라도 환영합니다.
답변
에서 고궁 박물원 문서 :
기본 필드는 프로그램의 기본 진입 점 인 모듈 ID입니다. 즉, 패키지 이름이 foo이고 사용자가 패키지를 설치 한 다음 require ( “foo”)를 수행하면 기본 모듈의 반출 오브젝트가 리턴됩니다.
패키지 폴더의 루트에 상대적인 모듈 ID 여야합니다.
대부분의 모듈에서 메인 스크립트를 사용하는 것이 가장 합리적이며 종종 그렇지 않습니다.
간단히 말해서 :
- 패키지의 진입 점이 루트 폴더 와 다른 경우 에만
main
매개 변수 가 필요 합니다. 예를 들어, 사람들은 종종 엔트리 포인트를 넣어 또는 해당 스크립트를 설명해야한다,이 경우 에서 .package.json
index.js
lib/index.js
lib/<packagename>.js
main
package.json
main
진입 점을require('yourpackagename')
명확하게 정의해야 하기 때문에 로 두 개의 스크립트를 가질 수 없습니다 .
답변
첫 번째 질문에 답하기 위해 모듈을로드하는 방법은 모듈 진입 점과 package.json 의 기본 매개 변수에 따라 다릅니다 .
다음과 같은 파일 구조가 있다고 가정 해 봅시다.
my-npm-module
|-- lib
| |-- module.js
|-- package.json
package.json에 기본 매개 변수가 없으면 모듈 진입 점을 제공하여 모듈을로드해야합니다.require('my-npm-module/lib/module.js')
.
package.json 기본 매개 변수를 다음과 같이 설정하면 다음과 같이 "main": "lib/module.js"
모듈을로드 할 수 있습니다 require('my-npm-module')
.
답변
예를 들어 package.json
파일 에 있다면 :
{
"name": "zig-zag",
"main": "lib/entry.js",
...
}
lib/entry.js
패키지의 주요 진입 점이됩니다.
전화 할 때
require('zig-zag');
노드에서 lib/entry.js
필요한 실제 파일이됩니다.
답변
main
키 의 중요한 기능 중 하나 는 진입 점에 대한 경로를 제공한다는 것입니다. 이 작업은 매우 유용 nodemon
합니다. 당신이 말한대로 키 nodemon
를 정의하고 작업 하면 CLI 대신 root 대신 pwd로 CLI를 입력하여 서버를 크랭크 할 수 있습니다 .main
package.json
"main": "./src/server/app.js"
nodemon
nodemon ./src/server/app.js
답변
내가 아는 한, npm의 노드 패키지 (라이브러리)에 대한 주요 진입 점입니다. npm 프로젝트가 다른 사람이 npm을 통해 설치할 수있는 노드 패키지 (라이브러리)가되는 경우에만 필요합니다.
build /, dist / 또는 lib / 폴더가있는 라이브러리가 있다고 가정합니다. 이 폴더에는 라이브러리에 대해 다음과 같은 컴파일 된 파일이 있습니다.
-lib/
--bundle.js
그런 다음 package.json 에서 npm에게 라이브러리 (노드 패키지)에 액세스하는 방법을 알려줍니다.
{
"name": "my-library-name",
"main": "lib/bundle.js",
...
}
npm으로 노드 패키지를 JS 프로젝트에 설치 한 후 bundled bundle.js 파일 에서 기능을 가져올 수 있습니다 .
import { add, subtract } from 'my-library-name';
라이브러리에 코드 분할 (예 : 웹팩)을 사용할 때도 마찬가지 입니다. 예를 들어이 webpack.config.js 는 프로젝트를 하나의 묶음 대신 여러 묶음으로 나누는 코드를 사용합니다.
module.exports = {
entry: {
main: './src/index.js',
add: './src/add.js',
subtract: './src/subtract.js',
},
output: {
path: `${__dirname}/lib`,
filename: '[name].js',
library: 'my-library-name',
libraryTarget: 'umd',
},
...
}
여전히 package.json 에서 라이브러리의 하나의 기본 진입 점을 정의 합니다 .
{
"name": "my-library-name",
"main": "lib/main.js",
...
}
그런 다음 라이브러리를 사용할 때 기본 진입 점에서 파일을 가져올 수 있습니다.
import { add, subtract } from 'my-library-name';
그러나 package.json 에서 기본 진입 점을 무시 하고 코드 분할 번들을 가져올 수도 있습니다.
import add from 'my-library-name/lib/add';
import subtract from 'my-library-name/lib/subtract';
결국 package.json 의 기본 속성은 라이브러리의 기본 진입 점 파일 만 가리 킵니다.
답변
OpenShift의 경우 하나의 PORT 및 IP 쌍만 (응용 프로그램 당) 바인딩 할 수 있습니다. 각 서비스 엔드 포인트에 내부 경로를 추가하여 단일 nodejs 인스턴스에서 두 서비스를 모두 제공 할 수 있어야합니다.
여기 당신의 응용 프로그램을 시작 OpenShift 프로젝트의 package.json을 사용하는 방법에 대한 몇 가지 정보를 가지고 : https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps #package_json
답변
“시작점”으로 생각하십시오.
C #과 같은 객체 지향 프로그래밍의 관점에서 이것은 객체 클래스의 init () 또는 생성자입니다. 이것이 “입력 지점”의 의미입니다.
예를 들어
public class IamMain // when export and require this guy
{
public IamMain() // this is "main"
{...}
... // many others such as function, properties, etc.
}
