taro-cli 无法指定可编译的目录,node_modules 无法进行编译。

Created on 18 Oct 2018  ·  17Comments  ·  Source: NervJS/taro

问题描述
taro-cli 无法指定可编译的目录,当前状态比较混乱,
1, node_modules 不进行编译。
2,node_modules/taro-ui/dist 文件夹下的文件确可以编译

这里想问,什么逻辑?为何不能指定呢?

复现步骤
es6文件放在
node_modules文件夹下,项目引用文件,无法进行编译只会被原样拷贝

期望行为
可以自定义,es6模块,走taro编译
例子:

include:[
  "node_modules/xxxx"
]

系统信息

  • 操作系统: mac os
  • Taro 版本: v1.0.7
  • Node.js 版本: v8.11.3
  • 报错平台: weapp

补充信息
图1:自定义包位置
image

图2:package.json 用file: 引用依赖
image

图3:编译后 dist/npm 文件夹内,文件被拷贝,但是未编译
image

enhancement

Most helpful comment

@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了

  • 小程序端,在 weapp.compile 下通过 include 字段来设置需要编译的包名
  • H5 端,在 h5 下通过 esnextModules字段来设置需要编译的包名

两个配置都是数组格式

All 17 comments

node_modules 里文件默认不编译,把所有源码放到 src 目录下就能编译

@luckyadam 不是这个意思,我的意思是,npm install 的东西是 es6 ,这个时候我其实是需要编译的,有没有办法支持,放在src目录下就必须要用相对路径,但是这个项目比较大,相对路径引用太困难,
例子:对request二次封装后,一个文件放在 src/utils/request 目录下,request使用场景很多,每次都是需要 ../../../utils/request.js 或者 ../../../../utils/request.js 这事是一个例子,还有很多文件都会出现该问题,希望支持 node_modules 编译 或者支持 别名

我懂你的意思,目前还不能支持到 node_modules 编译,只能通过放到 src 目录下解决,这个先记一下吧,需要看看如何来调整

能不能这样:

对于 node_modules 中的模块,如果 package.json 中,peerDenpendencies 包含 @tarojs/taro,则进行编译;包含 @tarojs/components 则说明这是一个基于 taro 的 UI 库。

或者在 package.json 中添加新的字段 taro, 然后 taro: true, taro: "ui", taro: "lib" 这样。

便于开发和使用基于 taro 的第三方库。

@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了

  • 小程序端,在 weapp.compile 下通过 include 字段来设置需要编译的包名
  • H5 端,在 h5 下通过 esnextModules字段来设置需要编译的包名

两个配置都是数组格式

OK 三克油

Thx

编译是编译了,但是没有处理对 Taro 的引用。。。还是没有办法在自己的包里使用 Taro...

还有 ts 文件虽然也会被编译,但是后缀名没改,小程序不认识 😂 不过这个问题不大

编译是编译了,但是没有处理对 Taro 的引用。。。还是没有办法在自己的包里使用 Taro...

还有 ts 文件虽然也会被编译,但是后缀名没改,小程序不认识 😂 不过这个问题不大

Taro 的引用是指?

node_modules 里还是不要有 ts 源文件吧

Taro 的引用是指?

node_modules 里还是不要有 ts 源文件吧

嗯嗯,就是比较懒,平时都直接用 ts-node 执行,不想编译成 js 😂

就是我自己的包里引用了 Taro:

import Taro from '@tarojs/taro'

编译出来的文件是这样:

var _taro = require("@tarojs/taro")

然后就会报找不到模块 @tarojs/taro 的错。

按照我的理解,编译后的文件应该类似于这样才能正常执行:

var _taro = require('../../@tarojs/taro-weapp/index.js')

遇到同样的问题,是否能考虑支持webpack中loader exclude和include的写法,另外在h5.webpackChain中尝试引入新的loader `打包的时候会提示无法找到对应的loder,用的是webpack4。

   `chain.module.rule('compile')
    .test(/\.ts[x]?$/)
    .exclude
    .add((path) => {

      //是否为node_modules中的模块
      var isNodeModules = path.indexOf("node_modules") >= 0;

      var isWxpComponents = ["_starter", "oak_", "common_"].some((item) => {
        return path.indexOf(item) >= 0;
      });
      console.log("isWxpComponents", isWxpComponents);
      if (isWxpComponents || path.endsWith("_starter")) {
        return false;
      }
      return isNodeModules;
    }).end()
    .use("typescript")
    .loader("awesome-typescript-loader")
    .options({
      presets: [
        [
          'env',
          {modules: false}
        ]
      ]
    })`

@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了

从哪个版本开始支持的呢?

另外文档是否更新下? 谢谢

我尝试了的确 __有效__

我用的 taro 版本是:1.3.9

我的配置是:

weapp: {
    compile: {
      include: [ 'qxjs/' ]
    },
}

如果是node_modules里面的包,直接使用包名,亲测有用

遇到同样问题,在1.3.x还是很难完美解决。我现在的做法是直接本地sync到src,然后用别名来引用

遇到同样问题,在1.3.x还是很难完美解决。我现在的做法是直接本地sync到src,然后用别名来引用

weapp: {
    compile: {
      include: [
        'miniapp-reporter',
      ],
    }
  } 

配置一下包名就可以

Taro 2 或 3 使用 webpack 构建,应该没有问题了。

Was this page helpful?
0 / 5 - 0 ratings