Babel不转译npm链接/符号链接包源代码

问题描述 投票:4回答:1

我正在使用节点设置共享模块环境。这是我的目录结构:

project
 |--common
 |    |--package.json
 |    |--graphql
 |          |----schema.js
 |
 |--server
     |--package.json
     |--server.js

链接两个项目:

$ cd project\common
$ npm link

然后:

$ cd ../server
$ npm link common

[common Package.json文件:

{
  "name": "common",
  "private": true,
  "version": "3.0.0",
  "description": "Common code for all projects",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Me",
  "license": "MIT"
}

[server package.json文件:

{
  "name": "server",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "concurrently \"babel-node start-server\" \"babel-node start-client\"",
    "server": "nodemon --exec \"babel-node start-server.js\"",
    "client": "nodemon --exec \"babel-node start-client.js\"",
    "lint": "eslint ."
  },
  "dependencies": {
    "babel-cli": "^6.24.1",
    "babel-core": "^6.25.0",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-es2016": "^6.24.1",
    "babel-preset-es2017": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "bcryptjs": "^2.4.3",
    "body-parser": "^1.17.2",
    "common": "file:../common",
    "connect-mongo": "^2.0.0",
    "crypto": "^1.0.1",
    "express": "^4.15.3",
    "express-graphql": "^0.6.12",
    "graphql": "^0.13.1",
    "graphql-relay": "^0.5.4",
    "jwt-simple": "^0.5.1",
    "mongoose": "^5.0.10",
    "morgan": "^1.8.2",
    "nodemailer": "^4.6.0",
    "passport": "^0.4.0",
    "passport-jwt": "^4.0.0",
    "path": "^0.12.7",
    "validator": "^9.1.1"
  },
  "devDependencies": {
    "concurrently": "3.5.1",
    "eslint": "^4.18.2",
    "eslint-config-airbnb": "16.1.0",
    "eslint-plugin-import": "2.9.0",
    "eslint-plugin-jsx-a11y": "6.0.3",
    "eslint-plugin-react": "7.7.0",
    "fs-extra": "^5.0.0",
    "node-fetch": "^2.1.1",
    "nodemon": "^1.11.0"
  },
  "babel": {
    "presets": [
      "es2015",
      "stage-0",
      "es2017"
    ],
    "plugins": [
      "transform-runtime"
    ]
  }
}

Server.js代码:

import schema from "common/graphql/schema";
...

正在运行的服务器应用程序:

$ npm run server
import { GraphQLSchema } from 'graphql';
^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:542:28)
    at loader (D:\project\server\node_modules\babel-register\lib\node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (D:\project\server\node_modules\babel-register\lib\node.js:154:7)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (D:/9. DEV/WORKSPACE/amplifactory/server/routes.js:25:1)
    at Module._compile (module.js:570:32)
    at loader (D:\project\server\node_modules\babel-register\lib\node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (D:\project\server\node_modules\babel-register\lib\node.js:154:7)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
[nodemon] app crashed - waiting for file changes before starting...

从我看到的结果来看,这不是在server目录之外转储代码,但是如果没有将common替换为server目录,则无法构建我的共享代码。

如何解决这个通货膨胀问题并使之正确移植?

javascript node.js npm webpack babel
1个回答
3
投票

您不会喜欢它,也许在2018年春季会有更好的答案,但是您可能需要为通用代码单独构建一个步骤。我有一个类似的项目,其中通用代码的package.json文件看起来像这样:

{
  "name": "stripmall_gcloud_services",
  "version": "1.0.0",
  "description": "wraps up some commonly used google helpers",
  "main": "./dist/index.js",
  "scripts": {
    "test": "standard --fix && mocha -r babel-register",
    "build": "babel lib -d dist"
  }...}

[请注意,npm构建步骤将转换通用代码,并注意主键指向已转换目录中的index.js文件。每当您更新公共代码时,您只需运行npm run build,所有链接都将按预期运行。

© www.soinside.com 2019 - 2024. All rights reserved.