2016-06-02 8 views
1

Ich habe ein Npm-Modul my_lib, die einige Objekte zur Verfügung stellt, die ich für die Verwendung von mehreren nachgelagerten Modulen verfügbar wäre. my_lib wird in ES6 geschrieben und verwendet babel zum transpilieren. Es lebt in einem privaten Github Repo, der für die Bauherren der nachgelagerten Module zugänglich ist. Es ist wichtig, dass die nachgeschalteten Module, die my_lib verbrauchen, in der Lage sind, Symbole von my_lib wie jedes andere Knotenmodul zu importieren.Setup Babel/Browserify Build für (private) npm Modul

Ich mag wäre in der Lage sein import { libA, libB } from 'my_lib'; in einem der nachgeschalteten Module und libA durch my_lib wie erwartet definiert haben, zu schreiben, vorausgesetzt, dass stromabwärts des Moduls package.json in dependencies wie einen Eintrag enthält "my_lib": "orgname/reponame#branchname"

I in my_lib einen Eintrag haben, so package.json unter scripts wie:

"postinstall" : "npm run build", 
"build": "mkdir ./dist && browserify ./src/index.js -t babelify -t envify -o index.js",` 

wo ./src/index.js ist

// Entry point for bundling 
export * as libB from "../sublib1/adapter"; 
export * as libA from "../sublib2/adapter"; 

Wenn nötig, könnte ich import {libA, libB} von my_lib/dist/bundle nennen, obwohl dies etwas unerwünscht ist. Die Hauptsache ist, alle Namen, die ich von my_lib exportieren, in den Downstream-Modulen verfügbar zu machen. Ich bin wahrscheinlich verwirrt darüber, was mit browserify und babel los ist. Ich bin sehr glücklich darüber, die Postinstall/Build-Hooks in jede Form zu ändern, die bequemer ist.

Derzeit im Downstream-Paket (eine express.js app), habe ich die Linie import * as adapters from my_lib;npm install auf dem express App Lauf ohne Fehler beendet. Ich sehe die index.js Datei, die ich in node_modules/my_lib erwarte. Wenn ich meine App nach der import (oder für diese Angelegenheit) einbringe, existiert das adapters Objekt, aber keines der libB oder libA auf dem Objekt. Es scheint ein reines Vanille-JS-Objekt ohne Mitglieder zu sein, aber __proto__.

Antwort

0

Normalerweise werde ich in diesem Fall nur babel verwenden und browserify vermeiden. Ich benutze so etwas wie dies in package.json:

{ 
    "main": "dist/index.js", 
    "scripts": { 
    "postinstall": "babel src/ -d dist/" 
    }, 
    "dependencies": { 
    "babel-cli": "^6.9.0", 
    "babel-preset-es2015": "^6.9.0" 
    } 
} 

Beachten Sie, dass der main Einstiegspunkt für das Paket verweist auf dist und nicht zu src. Dies ist zu machen import my_lib und require('my_lib') (beide gut funktionieren), um die kompilierte Version der Bibliothek zu verwenden.

Außerdem ist dies der Inhalt der .babelrc Datei, die Seite an Seite mit package.json

{ 
    "presets": ["es2015"] 
} 
0

Ich benutze babel und browserify zusammen.

Mein package.json

{ 
    "name": "my-project", 
    "version": "1.0.0", 
    "scripts": { 
    "build:js": "watchify assets/src/js/main_1.js -o 'exorcist assets/dist/js/main_1.js.map > assets/dist/js/main_1.js' -d -t [babelify --presets [latest]]", 
    "build:scss": "node-sass -w -r assets/src/scss/ -o assets/dist/css/", 
    "build": "npm run build:scss & npm run build:js" 
    }, 
    "devDependencies": { 
    "babel-cli": "^6.0.0", 
    "babel-preset-latest": "^6.16.0", 
    "babelify": "^7.3.0", 
    "browserify": "^13.1.1", 
    "exorcist": "^0.4.0", 
    "node-sass": "^4.5.0", 
    "watchify": "^3.7.0" 
    }, 
    "browserify": { 
    "transform": [ 
     "babelify" 
    ] 
    } 
} 

Aktuelle Version von package.json: https://gist.github.com/artamonovdev/5f24aaca504e4d1b299bba0413f0a57d