2016-12-12 2 views
6

Ich arbeite an zwei Knoten-Paketen gleichzeitig, nennen wir sie Bibliothek und Verbraucher. Die Bibliothek ist dafür verantwortlich, eine Menge Dinge im Browser zu rendern. Alle Consumer ist import Library from 'library' und rufen Sie Library(someConfigHere) - es ist im Grunde nur ein Test, um sicherzustellen, dass Bibliothek tut, was ich im Browser erwarte.Force Browserify, um Abhängigkeiten zu transformieren?

Ich habe npm link ed Bibliothek in Consumer und versuche, Browserify auf Consumer ausführen, aber ich bekomme diesen Fehler: ParseError: 'import' and 'export' may appear only with 'sourceType: module'. Die Bibliothek enthält tatsächlich eine ES6 export-Anweisung, also vermute ich, dass Browserify nur gegen Consumer und nicht Library läuft.

Also meine Frage ist: gibt es eine Möglichkeit, Browserify zu zwingen, Abhängigkeiten sowie zu transformieren?

Das ist mein package.json:

{ 
    "name": "consumer", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "start": "budo index.js --port $PORT", 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "babel-preset-es2015": "^6.13.2", 
    "babel-preset-react": "^6.11.1", 
    "babelify": "^7.3.0", 
    "browserify-shim": "^3.8.12" 
    }, 
    "browserify": { 
    "transform": [ 
     "babelify" 
    ] 
    }, 
    "babel": { 
    "presets": [ 
     "es2015", 
     "react" 
    ] 
    } 
} 

Dies ist index.js Consumer:

import Library from 'library' // <= this is what isn't getting babelified 

console.log(Library); 

Dies ist index.js Bibliothek:

export default (config) => { 
    console.log('Testing testing') 
} 
+0

Wie sieht Ihre Datei 'tsconfig.json' aus? Ein "ParseError" wie dieser klingt so, als ob der TS Compiler die Datei nicht durchläuft. –

+0

@DaveV Ich bin mir nicht sicher, was der TS Compiler ist. AFAIK der 'ParseError' ist eine Babel-Sache. – Rob

Antwort

4

Browserify Transformationen global sein konfiguriert werden kann, die bedeutet, dass sie ap sein werden pled auf Dateien innerhalb node_modules, auch.

Die Konfiguration erfolgt per-transform. Mit babelify, würden Sie es wie folgt konfiguriert werden:

browserify().transform("babelify", { 
    global: true 
}) 

Oder, wenn Sie die Befehlszeile verwenden, wie folgt aus:

browserify ... -t [ babelify --global ] ... 

Oder, um es in der package.json zu konfigurieren, es sollte wie folgt (beachten Sie die zusätzlichen eckigen Klammern) sein:

"browserify": { 
    "transform": [ 
    ["babelify", { "global": true }] 
    ] 
} 

Babelify implementiert auch eine ignore Option, so dass es möglich wäre, es so zu konfigurieren, dass nur die Dateien innerhalb von node_modules transformiert werden, die Sie möchten. Es gibt weitere Informationen here.

Ein andere Lösung wäre eine ähnliche package.json des browserify/babelify Konfiguration in Ihrem library Modul aufzunehmen. Bei der Verarbeitung von Abhängigkeiten überprüft Browserify die Dateien dieser Datei auf Transformationen und wendet alle konfigurierten Dateien an.

+0

Das hört sich nach der Lösung an, aber es würde passieren, dass man weiß, wie man das in der 'browserify'-Sektion von 'package.json' ausdrückt? – Rob

+1

Ich bekomme einen 'Unexpected token 'g'' Fehler, wenn es' global: true' trifft. Ich habe versucht, es in doppelte Anführungszeichen zu schreiben, die diesen Fehler zum Schweigen bringen, aber immer noch den ursprünglichen 'ParserError' geben. Es scheint, als würde Babelify diese Einstellung nicht ehren. – Rob

+0

Babelify sollte die Einstellung verwenden; Ich bin mir ziemlich sicher, dass ich es in der Vergangenheit benutzt habe. Es ist möglich/wahrscheinlich, dass browserify die 'global'-Einstellung ignoriert, wenn sie in einer Datei' package.json' verwendet wird. In der Tat denke ich darüber nach, was wahrscheinlich passiert (ich müsste die Quelle überprüfen, um es zu bestätigen). Die andere Möglichkeit wäre, eine ähnliche 'browserify'-Einstellung in die' package.json' des Moduls aufzunehmen, das Sie gerade verwenden - dann wäre die 'global'-Einstellung nicht erforderlich. – cartant

Verwandte Themen