2016-07-28 2 views
1

그래서 많은 자바 스크립트 파일에서 동일한 코드 조각을 가지고 있지만 경로 변경이나 기타 다양한 조건으로 인해이를 업데이트해야하는 경우가 있습니다. 이제 복사하여 새 파일에 붙여 넣기가 잘 작동하지만 성가 시게 실행됩니다. 내 "플러그인"코드로 하나의 자바 스크립트 파일을 유지하고 플러그인을 사용하는 다른 자바 스크립트 파일에 액세스 할 수있는 좋은 방법이 있습니까?자바 스크립트 플러그인을 작성하고 구성하는 가장 좋은 방법은 무엇입니까?

저는 좋은 nodej 솔루션과 바닐라 js 솔루션을 찾고 있습니다. 서로 공유 할 수 있다면 이상적이지만 어떤 수단으로도 요구되지는 않습니다. 이상적으로, 내가 workspace/ 내 작업 공간을 호스팅하고 일부 폴더, workspace/front-end-js/workspace/back-end-nodejs/을 가지고, 내가 MyPluginVar.Foo();

나는 어떤 시스템의 알고 같은 일을 수행 할 수 있도록 workspace/plugins/에 플러그인 떨어져 코드를 실행할 수 있도록하고 싶습니다, 노드의 var foo = require('bar'); 및 프론트 엔드 브라우저 버전과 같지만 모든 옵션을 실제로 알지 못합니다. 자바 스크립트 플러그인을 작성하고 구성하는 가장 좋은 방법은 무엇입니까?

-

편집 : 정말 NPM을 피하기 위해 노력하고있어하지만 최선의 선택이 될 수 있습니다.

+1

이 "모듈", "플러그인"하지만 호출되지 않습니다 : 여기에 글로벌 브라우저로 다시 떨어지는 반면, 지원하는 경우 CommonJS을 활용 UMD Github repo에서 예입니다. – Bergi

+0

@Bergi는 설명 +1에 감사드립니다. 나는 일반적인 의미로 플러그인이라는 단어를 사용했다. – Anselm

답변

2

일반적으로 프로젝트의 package.json 파일에 공유 라이브러리 및 플러그인을 추가하고 npm을 사용하여 설치합니다. module.exports 개체와 require 기능을 사용하는

이 사실상 사실 표준입니다.

ES2015 modules은 신흥 공식 표준이지만 아직 지원이 보편적이지는 않습니다. 환경이 지원한다면 좋은 옵션입니다.

프런트 엔드에 두 종류의 모듈을로드하려면 Webpack 또는 Browserify와 같은 번들러를 사용해야합니다.

이전 자바 스크립트 모듈은 일반적으로 전역 범위 (window)에 게시하며 프런트 엔드 코드에 대한 간단한 옵션입니다.

UMD (범용 모듈 정의) 래퍼를 사용하여 원하는 경우 다중 모듈 시스템을 지원할 수도 있습니다.

(function (root, factory) { 
    if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { 
     // CommonJS 
     factory(exports, require('b')); 
    } else { 
     // Browser globals 
     factory((root.commonJsStrictGlobal = {}), root.b); 
    } 
}(this, function (exports, b) { 
    // b represents some dependency 

    // attach properties to the exports object to define 
    // the exported module properties. 
    exports.action = function() {}; 
})); 
+0

고마워요.하지만 js 파일 하나만 업데이트하고 코드가 다른 모든 파일에서 업데이트되도록하려면 npm을 피하려고합니다. 기본적으로, 나는 종속물에게 명시 적으로 업데이트하는 것을 피하거나 새로운 코드를 복사하여 붙여 넣기 만하면됩니다. – Anselm

+1

위에서 설명한 모듈 시스템에서 npm을 사용할 필요는 없습니다. 예를 들어,'workspace/backend-js/index.js'의'workspace/plugins/myplugin.js'에있는 js 파일을'var myplugin = require ('../ plugins/myplugin ');'. –

관련 문제