[comments] npm 설치를 위해 package.json에 주석을 어떻게 추가합니까?

간단한 package.json 파일이 있고 주석을 추가하고 싶습니다. 이 작업을 수행 할 수있는 방법이 있습니까, 아니면이 작업을 수행하기위한 해킹이 있습니까?

{
  "name": "My Project",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x",
    "mongoose": "3.x"
  },
  "devDependencies" :  {
    "should": "*"
    /* "mocha": "*" not needed as should be globally installed */
  }
}

위의 예제 주석은 npm 나누기로 작동하지 않습니다. // 스타일 주석을 시도했습니다.



답변

이것은 최근 node.js 메일 링리스트 에서 논의되었습니다 .

npm을 만든 Isaac Schlueter에 따르면 :

… “//”키는 npm에서 어떤 목적으로도 사용되지 않으며 주석 용으로 예약되어 있습니다 … 여러 줄 주석을 사용하려면 배열 또는 여러 “//”를 사용할 수 있습니다 열쇠.

일반적인 도구 (npm, yarn 등)를 사용하면 여러 개의 “//”키가 제거됩니다. 이것은 살아남는다 :

{ "//": [
  "first line",
  "second line" ] }

이것은 살아남지 못할 것입니다 :

{ "//": "this is the first line of a comment",
  "//": "this is the second line of the comment" }


답변

JSON에 주석을 추가하는 또 다른 해킹이 있습니다. 이후:

{"a": 1, "a": 2}

에 해당

{"a": 2}

당신은 다음과 같은 것을 할 수 있습니다 :

{
  "devDependencies": "'mocha' not needed as should be globally installed",
  "devDependencies" :  {
    "should": "*"
  }
}


답변

복잡하고 해킹 된 솔루션에 대해 한 시간을 낭비한 후에서 부피가 큰 종속성 섹션에 주석을 달기위한 간단하고 유효한 솔루션을 모두 발견했습니다 package.json. 이처럼 :

{
  "name": "package name",
  "version": "1.0",
  "description": "package description",
  "scripts": {
    "start": "npm install && node server.js"
  },
  "scriptsComments": {
    "start": "Runs development build on a local server configured by server.js"
  },
  "dependencies": {
    "ajv": "^5.2.2"
  },
  "dependenciesComments": {
    "ajv": "JSON-Schema Validator for validation of API data"
  }
}

같은 방식으로 정렬하면 git commit diffs 또는으로 작업하는 동안 편집기에서 이러한 종속성 / 주석 쌍을 추적하는 것이 매우 쉽습니다 package.json.

추가 도구가 필요하지 않으며 평범하고 유효한 JSON입니다.

이것이 누군가를 돕기를 바랍니다.


답변

많은 흥미로운 아이디어.

내가하고있는 일은 이것입니다 :

{
  ...
  "scripts": {
    "about": "echo 'Say something about this project'",
    "about:clean": "echo 'Say something about the clean script'",
    "clean": "do something",
    "about:build": "echo 'Say something about building it'",
    "build": "do something",
    "about:watch": "echo 'Say something about how watch works'",
    "watch": "do something",
  }
  ...
}

이 방법으로 스크립트 자체에서 “의사-의견”을 읽고 터미널에서 어떤 종류의 도움을보기 위해 다음과 같은 것을 실행할 수 있습니다.

npm run about
npm run about:watch

이 토론을위한 나의 2cents 🙂


답변

NPS (노드 패키지 스크립트)가이 문제를 해결했습니다. NPM 스크립트를 별도의 JS 파일에 저장하면 주석을 추가하고 필요한 다른 JS 로직을 추가 할 수 있습니다.
https://www.npmjs.com/package/nps

package-scripts.js내 프로젝트 중 하나에서 샘플

module.exports = {
  scripts: {
    // makes sure e2e webdrivers are up to date
    postinstall: 'nps webdriver-update',

    // run the webpack dev server and open it in browser on port 7000
    server: 'webpack-dev-server --inline --progress --port 7000 --open',

    // start webpack dev server with full reload on each change
    default: 'nps server',

    // start webpack dev server with hot module replacement
    hmr: 'nps server -- --hot',

    // generates icon font via a gulp task
    iconFont: 'gulp default --gulpfile src/deps/build-scripts/gulp-icon-font.js',

    // No longer used
    // copyFonts: 'copyfiles -f src/app/glb/font/webfonts/**/* dist/1-0-0/font'
  }
}

방금 로컬 설치를 npm install nps -save-dev하고 package.json스크립트에 넣었습니다 .

"scripts": {
    "start": "nps",
    "test": "nps test"
}


답변

중복 된 키를 덮어 쓴다는 사실을 항상 남용 할 수 있습니다. 이것은 내가 방금 쓴 것입니다.

"dependencies": {
  "grunt": "...",
  "grunt-cli": "...",

  "api-easy": "# Here is the pull request: https://github.com/...",
  "api-easy": "git://..."

  "grunt-vows": "...",
  "vows": "..."
}

그러나 JSON이 중복 키를 허용하는지 여부는 확실하지
않습니다 (JSON 구문이 객체에서 중복 키를 허용합니까? 참조). . npm과 함께 작동하는 것 같습니다.

권장되는 핵은 nodejs 메일 링리스트"//" 에서 키 를 사용 하는 입니다. 테스트했을 때 “종속성”섹션에서는 작동하지 않았습니다. 또한 게시물의 예제는 여러 "//"키를 사용하므로 npm은 키가 중복 된 JSON 파일을 거부하지 않습니다. 즉, 위의 핵은 항상 괜찮습니다.

업데이트 : 중복 키 핵의 단점 중 하나는npm install --save 모든 중복 자동으로 제거 입니다. 불행히도, 그것을 간과하기가 매우 쉽고 의도적 인 의견이 사라졌습니다.

"//"이 보인다 해킹은 여전히 가장 안전합니다. 그러나 여러 줄 주석도에 의해 제거됩니다 npm install --save.


답변

재미있는 해킹 아이디어가 있습니다.

예를 들어 package.json에서 주석 분배기로 npm 패키지 이름을 작성 dependencies하고 devDependencies차단하십시오.x----x----x

{
    "name": "app-name",
    "dependencies": {
        "x----x----x": "this is the first line of a comment",
        "babel-cli": "6.x.x",
        "babel-core": "6.x.x",
        "x----x----x": "this is the second line of a comment",
        "knex": "^0.11.1",
        "mocha": "1.20.1",
        "x----x----x": "*"
    }
}

참고 : *블록에서 와 같이 유효한 버전으로 마지막 주석 구분선을 추가해야합니다 .