2017-11-24 1 views
0

Ich arbeite mit einem Raspberry Pi Null das ist mein Server, auf dem mein Modul läuft.Ignorieren von node_modules zum Kompilieren serverseitiger ES6 mit Webpack lokal

Raspberry's sind nicht die besten, um Code zu kompilieren, also möchte ich den serverseitigen Code lokal kompilieren. Dazu muss ich den Code kompilieren, ohne meine Importe aufzulösen. Warum das ?

Da das Servermodul andere Module verwendet, die nur auf dem Raspberry (wie UPM oder MRAA für Sensoren) installiert werden können.

Für jetzt kompiliere ich auf dem Pi, aber es ist langsam.

const path   = require("path"); 
const webpack  = require("webpack"); 
const nodeExternals = require("webpack-node-externals"); 

module.exports = { 
    entry: 
     { 
      index: __dirname + "/src/index.js" 
     }, 
    output: { 
     // sourceMapFilename: "[name].map", 
     path: path.resolve(__dirname, "build"), 
     filename: "[name].js", 
     sourceMapFilename: "[name].map", 
     chunkFilename: "[id].chunk.js" 
    }, 
    module: { 
     rules: [ 
      { 
       test: /\.js$/, 
       include: [ 
        path.resolve(__dirname, "src") 
       ], 
       exclude: /(node_modules|bower_components)/, 
       use: { 
        loader: "babel-loader", 
        options: { 
         cacheDirectory: true, 
         presets: ["env"], 
         plugins: [ 
          ["transform-runtime"], 
          ["transform-es2015-modules-commonjs-simple", { // Very important 
           "noMangle": true 
          }] 
         ] 
        } 
       } 
      } 
     ] 
    }, 
    plugins: [ 
     new webpack.ProvidePlugin({Hardlets: path.resolve(__dirname, "../Hardlets/build/index")}), 
     new webpack.IgnorePlugin(new RegExp("/(node_modules)/")) 
     // new webpack.optimize.UglifyJsPlugin(), 
     // new HtmlWebpackPlugin({template: "./src/index.html"}) 
    ], 
    target: "node", 
    externals: [nodeExternals()], 
    devtool: "source-map" 
}; 

Was mir einen Fehler gibt, weil nur den devDependencies lokal installiert ist, nicht aber die anderen Abhängigkeiten (Sensoren ...):

Also ich versuche es6 lokal mit meiner Config zu kompilieren :

ERROR in ./src/hardlets/relays/Relays.js Module not found: Error: Can't resolve 'jsupm_relay' in '/home/stinky/Projects/gardener/Sensors/src/hardlets/relays' @ ./src/hardlets/relays/Relays.js 1:1008-1030 @ ./src/HardletInstances.js @ ./src/index.js

ERROR in ./src/hardlets/dht22/DHT22.js Module not found: Error: Can't resolve 'rpi-dht-sensor' in '/home/stinky/Projects/gardener/Sensors/src/hardlets/dht22' @ ./src/hardlets/dht22/DHT22.js 1:925-950 @ ./src/HardletInstances.js @ ./src/index.js

Wie kann ich webpack von dem Versuch/Import diese Abhängigkeiten verhindern zu lösen? Die Abhängigkeiten müssen zur Laufzeit aufgelöst werden.

Es ist mein package.json:

{ 
    "name": "gardener", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "watch": "webpack --watch", 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "repository": { 
    "type": "git", 
    "url": "http://192.168.8.100:3000/pi/Gardener.git" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "babel-core": "^6.26.0", 
    "babel-loader": "^7.1.2", 
    "babel-polyfill": "^6.26.0", 
    "babel-preset-env": "^1.6.1", 
    "babel-runtime": "^6.26.0", 
    "babel-plugin-transform-runtime": "^6.23.0", 
    "babel-plugin-transform-es2015-modules-commonjs-simple": "^6.7.4", 
    "webpack": "^3.8.1", 
    "webpack-node-externals": "^1.6.0" 
    }, 
    "dependencies": { 
    "upm": "^1.0.0", 
    "rpio": "^0.9.19", 
    "rpi-dht-sensor": "^0.1.1" 
    } 
} 
+0

Versuchen Sie, diese 2 Abhängigkeiten von der Externen Array – apokryfos

+0

Anhängen I @apokryfos gerade versucht, ich nicht Arbeit. Ich habe 'Äußerlichkeiten: [ nodeExternals(), { "jsupm_relay": "jsupm_relay", "RPI-dht-Sensor": "RPI-dht-Sensor" } ]' Webpack kompiliert gut, aber nicht zu laden wenn ich es laufen lasse werfen: ** module.exports = rpi-dht-sensor; ^ ReferenceError: rpi ist nicht definiert ** – Pirix

+0

Meine Annahme war, dass diese Exporte nicht kompiliert werden müssen, da sie bereits auf Pi installiert sind. Wenn dies nicht der Fall ist, müssen Sie die Abhängigkeiten auch lokal installieren. Stellen Sie nur sicher, dass Sie den kompilierten Code auf Pi und von einem Pfad ausführen, wo es die Abhängigkeiten auflösen kann – apokryfos

Antwort

0

Die Module nicht mit nodeExternals() ausgeschlossen werden können, weil es die Module in/node_modules/auflistet. Die Module, die ausgeschlossen werden sollen, werden jedoch nicht lokal installiert, sodass nodeExternals() die Aufgabe nicht erfüllt.

Sie müssen sie ausschließen, indem Sie package.json lesen.

Dadurch werden die Module aus der package.json Datei & ausschließen sie anstelle des node_modules Verzeichnis lesen:

// webpack.config.js 
var nodeExternals = require('webpack-node-externals'); 
... 
module.exports = { 
    ... 
    externals: [nodeExternals({ 
     modulesFromFile: true 
    })], // in order to ignore all modules in package.json when bundling 
    ... 
};