搜尋

首頁  >  問答  >  主體

node.js - npm 发布ES6模块后再引入,import出错?

D:\iota\code\web\iota-api-server-scaffold\node_modules\iota-user\index.js:4
import * as auth from './src/auth';
^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:513:28)
    at Module._extensions..js (module.js:550:10)
    at Object.require.extensions.(anonymous function) [as .js] (C:\Users\35824\AppData\Roaming\npm\node_modules\babel-cli\node_modules\babel-register\lib\node.js:166:7)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (config.js:10:1)

npm set registry 本地仓库
npm adduser --registry 本地仓库
npm publish

编译用的 babel,
我怀疑是在引入后不识别模块里的node_modules了,
那么是我发布的方式不对,还是需要什么命令转换?

伊谢尔伦伊谢尔伦2871 天前663

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 14:03:12

    1. "編譯用的 babel"是,指的是類別庫專案iota-user,還是目前引用類別庫的專案iota-api-server-scaffold

    2. iota-user專案的package.json裡的main欄位指的是什麼檔案? babel編譯後的,還是編譯器前的原始檔?

    建議你先完整的讀完package.json,然後也給你一個參考項目:angular-baidu-map。我原始碼是用es6寫的,透過webpack + babel編譯,在npm發布編譯後的檔案。 main欄位指向dist/angular-baidu-map.js(編譯後的檔案)。

    當別人也在babel或其他支援ES6模組規範的編譯環境下,都可以用import {ngBaiduMap} from 'angular-baidu-map';來引用我的模組

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:03:12

    {
        test: /\.js$/,
        loader: 'babel',
        exclude: /node_modules/
    }

    這是通常的babel配置, 發現沒有, 把node_modules資料夾過濾了, 也就是說npm方法安裝的依賴, 是不會走babel編譯的...而import不經過編譯,是不能直接執行的...

    如果npm上的發布能編譯後再發布最好, 如果是別人的專案, 沒辦法改, 那麼npm下來了, 挪動專案資料夾裡再引用.

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:03:12

    babel 或其他轉換的模組請參考 @leftstick 的答案

    原生支援是一個複雜的主題,先把這篇文章讀過再說:https://medium.com/@nodesource/es-modules-and-node-js-hard-choices-2b6995e4d491#.j7lkau8kq

    回覆
    0
  • 取消回覆