2017-08-11 98 views
0

我曾經發表過NPM包: https://www.npmjs.com/package/jk-router未定義導入已NPM模塊

使用它作爲一個經典的全局變量window.Router時工作正常。 但當我嘗試在一個非常基本的流星應用程序中使用ES6語法來導入它,它不會返回underfined ...

正如你所看到的,我使用名爲export(https://github.com/jalik/jk-router/blob/master/src/router.js#L174),並確保我還使用默認導出(https://github.com/jalik/jk-router/blob/master/src/router.js#L559)。

但沒有下返回路由器的對象:

import Router from "jk-schema"; 
import {Router} from "jk-schema"; 

也許有什麼毛病wepback配置? https://github.com/jalik/jk-router/blob/master/webpack.config.js

const path = require("path"); 
const Package = require("./package.json"); 
const isProd = process.argv.indexOf("-p") !== -1; 
const filename = Package.name + (isProd ? ".min" : ""); 

module.exports = { 
    target: "web", 
    entry: { 
     bundle: path.join(__dirname, "src/router.js") 
    }, 
    output: { 
     path: path.join(__dirname, "dist"), 
     filename: `${filename}.js` 
    }, 
    resolve: { 
     extensions: [".js"], 
     modules: [path.join(__dirname, "src/js"), "node_modules"] 
    }, 
    module: { 
     rules: [ 
      { 
       test: /\.(js)$/, 
       exclude: /node_modules/, 
       use: "babel-loader" 
      } 
     ] 
    }, 
    plugins: [] 
}; 

我還有一個NPM包(https://www.npmjs.com/package/jk-schema),我可以沒有問題導入,但它使用咕嘟咕嘟包裝。 也許我已經錯過了一些東西,我已經搜索了幾個小時,並且找不到有什麼問題......

回答

0

挖了數小時後,我終於發現我需要在webpack配置中定義output.libraryTarget屬性和umd值。我沒有發現任何的官方文檔中,只在本頁面的引用:https://webpack.js.org/configuration/

最後的WebPack的配置是這樣的:

const path = require("path"); 
const Package = require("./package.json"); 
const isProd = process.argv.indexOf("-p") !== -1; 
const filename = Package.name + (isProd ? ".min" : ""); 

module.exports = { 
    entry: { 
     bundle: path.join(__dirname, `src/jk-router.js`) 
    }, 
    output: { 
     libraryTarget: "umd", 
     path: path.join(__dirname, "dist"), 
     filename: `${filename}.js` 
    }, 
    resolve: { 
     extensions: [".js"], 
     modules: [path.join(__dirname, "src"), "node_modules"] 
    }, 
    module: { 
     rules: [ 
      { 
       test: /\.js$/, 
       exclude: /node_modules/, 
       loader: "babel-loader" 
      } 
     ] 
    } 
}; 
0

這是您的問題,無論您何時發佈NPM軟件包,都需要在package.json中指定主文件。

https://github.com/jalik/jk-router/blob/master/package.json#L5

我認爲主要屬性指向錯誤的文件,它應該是「router.js」,而不是「JK-router.js」。

如果你希望你的文件名,繼續保持「JK-router.js」 U可以在webpack.config.js文件更改輸出字段爲「JK-router.js」

+0

這個問題不存在,因爲'dist'文件夾包含編譯最終的Javascript ,所以它是'main'屬性所指的正確文件。此外,我不能指向原始源文件,因爲它是用現代語法編寫的ES6。這就是爲什麼我使用Webpack來轉換爲經典的JS。 正如我所說,我有另一個結構幾乎相同的包,唯一的區別是它使用Gulp而不是Webpack。 –

+0

輸出文件的名稱是文件名:'$ {filename} .js',所以webpack將創建一個jk-router.min.js文件...請檢查dist文件夾是否有編譯的文件 – felixmosh